Angularjs $watch函数的返回值
我是AngularJs的新手,我正在使用Angular1.4。 问题是: 我使用的是一个简单的计数器对象,定义如下:Angularjs $watch函数的返回值,angularjs,Angularjs,我是AngularJs的新手,我正在使用Angular1.4。 问题是: 我使用的是一个简单的计数器对象,定义如下: var myCounter = (function(){ var count =0; return { "inc": function(){ count++;
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函数在其中执行。是的,回调方法也很好。非常感谢。回调方法也很好。非常感谢。回调方法也很好。非常感谢。