如果SharedFactory中的$scope.variable发生更改,我希望自动将两个控制器中的data.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“。如何做到这一点?
发布于 2015-12-13 22:54:37
因为你使用的是原始变量,而不是object,所以一旦你设置了它,你实际上就失去了对原始对象的引用,所以你可以返回所有的数据对象,而不是返回数据对象的值(这是原始的)。
getVal: function () {
return data;
}
下面是更新plunker...
发布于 2015-12-13 22:55:11
最简单(也可能更有效)的做法是在您的控制器中直接引用SharedFactory.data,而不是SharedFactory.data.variable。这样,当data.variable的值发生变化时,它会随着引用数据变量而不是特定值而在所有控制器中发生变化。一般不推荐使用原语。
另一种解决方案是在控制器中使用$scope.$watch,只需观察值的变化,并在局部变量发生变化时更新它。
https://stackoverflow.com/questions/34257316
复制