Angularjs $watch函数的返回值

Angularjs $watch函数的返回值,angularjs,Angularjs,我是AngularJs的新手,我正在使用Angular1.4。 问题是: 我使用的是一个简单的计数器对象,定义如下: var myCounter = (function(){ var count =0; return { "inc": function(){ count++;

我是AngularJs的新手,我正在使用Angular1.4。 问题是: 我使用的是一个简单的计数器对象,定义如下:

var myCounter = (function(){
                    var count =0;
                    return {
                        "inc": function(){
                            count++;
                        },
                        "dec": function(){
                            if(count>0){
                                count--;
                            }
                        },
                        "getCount": function(){
                            return count;
                        }
                    };
                })();
var myCounter = (function(callback){
                    var count =0;
                    return {
                        "inc": function(){
                            callback(++count);
                        },
                        "dec": function(){
                            if(count>0){
                                count--;
                            }
                            callback(count);
                        },
                        "getCount": function(){
                            return count;
                        }
                    };
                })();
我希望保持count变量私有,并且仅通过“getCount”函数读取值

每当计数增加/减少时,我必须根据更新的“计数”值执行一组操作。为此,我想使用“$watch”来观察变化。但我只能通过调用函数“getCount”来获取该值

请建议如何在此场景中编写“$watch”。如果这不是一个正确的方法,请建议一个更好的方法

提前谢谢

$watch的格式是$watchwatchExpression,listenerFunction。在这种情况下,watchExpression可以是要计算的函数。因此,可以将getCount函数而不是函数的结果传递给$watch

$scope.$watch(myCounter.getCount, function(){
    //Do stuff
})
所以

如果控制器可以访问myCounter,则$watch在其中定义。

$watch的格式是$watchwatchExpression,listenerFunction。在这种情况下,watchExpression可以是要计算的函数。因此,可以将getCount函数而不是函数的结果传递给$watch

所以

如果控制器可以访问myCounter,则$watch在其中定义。

每当计数增加/减少时,您需要执行回调。您可以将回调传递给构造函数,如下所示:

var myCounter = (function(){
                    var count =0;
                    return {
                        "inc": function(){
                            count++;
                        },
                        "dec": function(){
                            if(count>0){
                                count--;
                            }
                        },
                        "getCount": function(){
                            return count;
                        }
                    };
                })();
var myCounter = (function(callback){
                    var count =0;
                    return {
                        "inc": function(){
                            callback(++count);
                        },
                        "dec": function(){
                            if(count>0){
                                count--;
                            }
                            callback(count);
                        },
                        "getCount": function(){
                            return count;
                        }
                    };
                })();
或者,您可以在inc或dec事件上传递回调:

这两种方法的区别在于,在第一种方法中,您将在任何递增/递减事件中执行相同的操作;在第二种方法中,您将在此类事件发生时定义回调行为。

每当计数递增/递减时,您需要执行回调。您可以将回调传递给构造函数,如下所示:

var myCounter = (function(){
                    var count =0;
                    return {
                        "inc": function(){
                            count++;
                        },
                        "dec": function(){
                            if(count>0){
                                count--;
                            }
                        },
                        "getCount": function(){
                            return count;
                        }
                    };
                })();
var myCounter = (function(callback){
                    var count =0;
                    return {
                        "inc": function(){
                            callback(++count);
                        },
                        "dec": function(){
                            if(count>0){
                                count--;
                            }
                            callback(count);
                        },
                        "getCount": function(){
                            return count;
                        }
                    };
                })();
或者,您可以在inc或dec事件上传递回调:

这两种方法的区别在于,在第一种方法中,您将在任何递增/递减事件中执行相同的操作,而在第二种方法中,您将在发生此类事件时定义回调行为。

Nice on$watch和更多!我希望这会指引你正确的方向。 在您的例子中,您应该在scope中声明对象,因为angular只监视$scope变量,所以您的代码如下所示

$scope.myCounter = (function(){
                var count =0;
                return {
                    "inc": function(){
                        count++;
                    },
                    "dec": function(){
                        if(count>0){
                            count--;
                        }
                    },
                    "getCount": function(){
                        return count;
                    }
                };
            })();

$scope.$watch('myCounter.getCount', function(newValue, oldValue) {
     if(newValue != oldValue && newValue !=null){
         //call your function..
       }
})
漂亮的美元手表和更多!我希望这会指引你正确的方向。 在您的例子中,您应该在scope中声明对象,因为angular只监视$scope变量,所以您的代码如下所示

$scope.myCounter = (function(){
                var count =0;
                return {
                    "inc": function(){
                        count++;
                    },
                    "dec": function(){
                        if(count>0){
                            count--;
                        }
                    },
                    "getCount": function(){
                        return count;
                    }
                };
            })();

$scope.$watch('myCounter.getCount', function(newValue, oldValue) {
     if(newValue != oldValue && newValue !=null){
         //call your function..
       }
})

你可以做$scope.$watchmyCounter.getCount,函数{}好的,我有点理解你在做什么。但是为什么不将其作为对象处理,而将其作为匿名对象执行呢。你应该考虑的另一件事是你想做什么。您还可以将回调附加到您拥有的不同函数,然后调用dec、inc或getCount的特定代码,而不是查看整个函数。谢谢Satpal。它起作用了。@KristianBarrett:我想让count变量私有,所以我立即调用最外层的函数来创建一个作用域,inc和dec函数在其中执行。是的,回调方法也很好。非常感谢。你可以做$scope.$watchmyCounter.getCount,函数{}好的,我有点理解你在做什么。但是为什么不将其作为对象处理,而将其作为匿名对象执行呢。你应该考虑的另一件事是你想做什么。您还可以将回调附加到您拥有的不同函数,然后调用dec、inc或getCount的特定代码,而不是查看整个函数。谢谢Satpal。它起作用了。@KristianBarrett:我想让count变量私有,所以我立即调用最外层的函数来创建一个作用域,inc和dec函数在其中执行。是的,回调方法也很好。非常感谢。回调方法也很好。非常感谢。回调方法也很好。非常感谢。