我正在构建一个相当大的应用程序,并且想确保我做对了。
第一只手表按预期为空。
但当http呼叫完成时,观察不会再次发射。
但是,自从使用ng-repeat工作以来,来自http电话的品牌都在范围内。
我宁愿不使用$ broadcast,因为我觉得它过度使我的一些使用$ watch的指令变得复杂。
Heres a plunker:http://plnkr.co/edit/L1SNV7mt6x7XCF4QFDPk?p=preview
var app = angular.module('app', []);
app.controller('main', function($scope, $http, Brand) {
$scope.brands = Brand.all;
$scope.$watch('brands', function(old, neww) {
console.log('brands', old, neww);
});
});
app.factory('Brand', function($http) {
var brands = {
all: [],
add: function(item) {
brands.all.push(item);
},
get: function() {
brands.all = [];
$http.get('json.txt').success(function(data) {
_.each(data, function(brand){
brands.add(Model(brand));
});
});
}
};
var Model = function(item) {
return item;
};
brands.get();
return brands;
});
答案 0 :(得分:4)
尝试将$watch
中的3d参数设置为true
:
$scope.$watch('brands', function(old, neww) {
console.log('brands', old, neww);
}, true);
它会说角度更深。 Docs
答案 1 :(得分:0)
这与AngularJS如何检测其监视的项目的更改有关。只需观看是否在数组中添加或删除元素,您就会想要使用$watchCollection
而不是$watch
。