我很难破译这里发生的事情。我理解Angular的$ digest循环的基础知识,根据this SO post,我通过简单地将一个有作用域的var分配给一个服务的属性(在这种情况下是一个数组)来正确地做事。正如你所看到的,我可以让CtrlA的'东西'更新的唯一方法是在我更新我的服务的属性并引用一个新数组后,重新分配它。在两个控制器之间共享/监视服务变量的问题
这里是说明我的问题一个小提琴:
http://jsfiddle.net/tehsuck/Mujun/
(function() {
angular.module('testApp', [])
.factory('TestService', function ($http) {
var service = {
things: [],
setThings: function (newThings) {
service.things = newThings;
}
};
return service;
})
.controller('CtrlA', function ($scope, $timeout, TestService) {
$scope.things = TestService.things;
$scope.$watch('things.length', function (n, o) {
if (n !== o) {
alert('Things have changed in CtrlA');
}
});
$timeout(function() {
TestService.setThings(['a', 'b', 'c']);
// Without the next line, CtrlA acts like CtrlB in that
// it's $scope.things doesn't receive an update
$scope.things = TestService.things;
}, 2000);
})
.controller('CtrlB', function ($scope, TestService) {
$scope.things = TestService.things;
$scope.$watch('things.length', function (n, o) {
if (n !== o) {
// never alerts
alert('Things have changed in CtrlB');
}
});
})
})();
:咔咔咔咔:好吧,我把Array.count的事情归结为试图快速写出这个AM。抱歉。 – Chief
我明白你对数组引用的看法,我想这就是我不明白的地方。我理解它的方式,在$摘要期间,我认为如果数据绑定是Object或Array,angular会比较引用?我想我错了。 虽然谢谢! – Chief
这不是一个角度问题。当你将'TestService.things'指向另一个数组时,'CtrlA。$ scope.things'仍然指向空的旧的,并且Angular会相应地渲染它。据Angular所知,“CtrlA。$ scope.things”没有任何改变。 –