我很難破譯這裏發生的事情。我理解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」沒有任何改變。 –