如何在特定控制器中设置Factory服务和$ scope值之间的数据绑定?

时间:2015-12-13 22:47:22

标签: angularjs data-binding binding

如果SharedFactory中的data.variable发生了变化,我想自动将两个控制器中的$ scope.variable刷新到新值:

.controller('FirstController', function($scope, SharedFactory) {
  $scope.variable = SharedFactory.getVal();
})

.controller('SecondController', function($scope, SharedFactory) {
  $scope.variable = SharedFactory.getVal();
  SharedFactory.setVal("test string 2");
})

.factory("SharedFactory", function () {
    var data = {                // all variables by default
        variable : 'test string'
    };
    return {
        getVal: function () {
            return data.variable
        },
        setVal: function (i) {
            data.variable = i;
        }
    }
});

http://plnkr.co/edit/b1RNcl6Pz2iuRr2t2Q9x?p=preview

因此,在此示例中,两个控制器中的正确结果必须为“test string 2”。怎么做?

2 个答案:

答案 0 :(得分:0)

因为你使用原始变量而不是使用对象所以一旦你设置它实际上你失去了对原始对象的引用,所以不是返回数据对象值(这是原始的),你可以返回所有数据对象...

getVal: function () {
    return data;
}

这是更新plunker...

答案 1 :(得分:0)

最简单(也可能更高效)是在控制器中直接引用SharedFactory.data - 而不是SharedFactory.data.variable。这样,当data.variable的值发生变化时,它会在引用数据变量而不是特定值时在所有控制器中发生变化。使用原语通常不会被推荐。

另一种解决方案是在控制器中使用$ scope。$ watch,只需观察值的变化,并在变化时更新局部变量。