$ watchCollection不会在对象更改时触发

问题描述 投票:0回答:2

我一直在尝试找出为什么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!");

            });

        }
    }
})
angularjs angularjs-scope
2个回答
1
投票

假设其他所有内容都正确,请尝试以下操作:

scope.$watchCollection('products', function(newValue, oldValue){

代替

scope.$watchCollection(scope.products, function(newValue, oldValue){

[$watchCollection可以采用计算为数组的字符串(角度表达式),也可以采用返回值的对象或函数。

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope


-1
投票

[抱歉,有错字。参数应为函数或字符串形式的表达式。

scope.$watchCollection(function(){ return scope.products; }, function(newValue, oldValue){



});
© www.soinside.com 2019 - 2024. All rights reserved.