控制器数据更改时更新出厂值

时间:2016-03-22 11:35:24

标签: angularjs factory

我的应用中有一家工厂:

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?

1 个答案:

答案 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/