У меня есть завод в моем приложении:
dashboard.factory('ProxyStatusFactory', ['$resource','CodisData', function ($resource,CodisData) {
return $resource('http://' + CodisData.Addr + '/api/proxy', {}, {
query:{ method: 'GET', url : 'http://' + CodisData.Addr + '/api/proxy/list', isArray: true },
setStatus:{ method: 'POST' }
});
}]);
CodisData
является угловым значением
dashboard.value("CodisData",{"Name":"NA","Addr":"NA"});
то я использую его в своем контроллере следующим образом:
$scope.codis_name = selected.Tag;
$scope.codis_addr = selected.Addr;
CodisData.Addr = selected.Addr;
$scope.proxy_array = ProxyStatusFactory.query();
я изменил CodisData.Addr, но в ProxyStatusFactory ресурс $ также возвратил ' http://na/api/proxy '
поэтому, когда CodisData изменяется, как синхронизированное обновление ProxyStatusFactory и возвращает правильный $ resource?
попробуй это:
dashboard.factory('ProxyStatusFactory', ['$resource', function ($resource) {
return $resource('http://:addr/api/proxy/', {}, {
query: {
method: 'GET',
url: 'http://:addr/api/proxy/list',
params: {},
isArray: true
},
setStatus:{ method: 'POST' }
});
}]);
затем используйте в контроллере следующее:
ProxyStatusFactory.query({addr: CodisData.Addr});
Двигаясь вперед с объяснением... угловая фабрика/сервис - это одиночные игры, поэтому они создаются только ОДИН. Таким образом, http url также создается только один раз, исходя из текущего значения CodisData.Addr
. Вот почему + CodisData.Addr +
изменяется на :addr
чтобы сделать эту часть URL- + CodisData.Addr +
настраиваемой....
Надеюсь, это поможет :)
@Обновить
проверяется на локальном проекте и вводит переменные в url-часть, работает, как ожидалось, но когда желаемый url является внешним отдыхом api, тогда он терпит неудачу с сообщением, которое вы описываете.
В этом случае вы можете динамически создавать объект $ resource. Вот jsfiddle с рабочей фабрикой, которая динамически создает ресурсы. https://jsfiddle.net/qwetty/mxrz2cxh/13/
XMLHttpRequest cannot load http://:addr/api/proxy/list. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
но я изменяю его следующим образомquery:{ method: 'GET', url:':addr/api/proxy/list', isArray: true },
это сработало.LHttpRequest cannot load %310.0.0.1:6000/api/proxy/list. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
как добавитьhttp://
?ProxyStatusFactory.query({addr: CodisData.Addr});
? Важно иметь{addr: CodisData.Addr}
внутри методаquery
.