在knockoutJS中,可以订阅observable viewmodel属性的更改,例如:
myViewModel.personName.subscribe(function(newValue) {
alert("The person's new name is " + newValue);
});
我目前正在学习AngularJS,我想知道AngularJS中是否有相同的内容?我试过这个,但没有运气。
答案 0 :(得分:49)
AngularJS中的scope对象有一个名为$watch
的特殊方法,用于“观察”范围属性。
它接受一个接收模型的旧值和旧值的回调:
$scope.$watch('modelName', function(newValue, oldValue){
// Do anything you like here
});
回调是在初始化和每次模型更改时。因此,最好添加一个额外的相等检查,如下所示:
$scope.$watch('modelName', function(newValue, oldValue){
// Check if value has changes
if(newValue === oldValue){
return;
}
// Do anything you like here
});
这使您可以“观察”您的模型,并在需要时执行某些操作。
还有一句话:如果您正在观看包含对象的模型,您应该使用额外的第三个参数来告诉AngularJS通过对象相等而不是通过引用来比较这两个值(因为引用不会更改,因此不会像这样触发观察者:
$scope.$watch('modelName', function(newValue, oldValue){
// Do anything you like here
}, true); // Add extra 'true' parameter to check for object equality
您可以在AngularJS scope页面上阅读更多文档。
希望有所帮助!
答案 1 :(得分:7)
对于由用户操作或应用程序事件触发的API调用和异步数据,最好使用
$rootScope.$broadcast('updateSearch', value);
直接在服务函数的回调中并在控制器中利用它,如:
$scope.$on('updateSearch', function(event,value) {
$scope.search = value;
});
答案 2 :(得分:2)
您可以使用$ watch检查范围对象的属性何时更改。