我一直在尝试找出为什么watchCollection不会在对象更改时不触发?
.factory('Products', function($http, $timeout){
function Products(data){
if (data) {
this.setData(data);
};
};
Products.prototype = {
selected: {},
setData: function(data) {
angular.extend(this, { categories: data });
},
load: function() {
var scope = this;
$http
.get('products.php?option=get_categories')
.success(function(data) {
scope.setData(data);
});
}
};
var instanceManager = {
products: false,
get: function(){
if (!this.products){
this.products = new Products();
this.products.load();
};
return this.products;
}
};
return instanceManager;
})
这里是指令:
.directive("foo", function(Products){
return {
restrict: 'A',
link: function(scope, el, attrs) {
scope.products = Products.get();
scope.$watchCollection(scope.products, function(newValue, oldValue){
if (newValue == oldValue) {
return;
};
console.log("Hello!");
});
}
}
})
假设其他所有内容都正确,请尝试以下操作:
scope.$watchCollection('products', function(newValue, oldValue){
代替
scope.$watchCollection(scope.products, function(newValue, oldValue){
[$watchCollection
可以采用计算为数组的字符串(角度表达式),也可以采用返回值的对象或函数。
https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope
[抱歉,有错字。参数应为函数或字符串形式的表达式。
scope.$watchCollection(function(){ return scope.products; }, function(newValue, oldValue){
});