我的应用中有一家工厂:
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中,$ resource也返回'http://na/api/proxy'
所以当CodisData改变时,如何同步更新ProxyStatusFactory并返回正确的$ resource?
答案 0 :(得分:0)
试试这个:
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});
继续解释......
角度工厂/服务是单件,因此它们仅在ONCE创建。因此,基于当前值CodisData.Addr
,http url也只创建一次。
这就是为什么+ CodisData.Addr +
被更改为:addr
以使这部分网址可配置....
我希望这有帮助:)
@Update
在本地项目上测试并将变量注入到url部分,按预期工作,但是当需要url是外部rest api时,它会失败并显示您描述的消息。
在这种情况下,您可以动态创建$ resource对象。这是jsfiddle与工作工厂动态创建资源。 https://jsfiddle.net/qwetty/mxrz2cxh/13/