在 knockoutJS 中,可以订阅可观察视图模型属性的更改,例如:
myViewModel.personName.subscribe(function(newValue) {
alert("The person's new name is " + newValue);
});
我目前正在学习 AngularJS,我想知道 AngularJS 中是否有与此等价的东西?我试过搜索这个,但没有任何运气。
在 knockoutJS 中,可以订阅可观察视图模型属性的更改,例如:
myViewModel.personName.subscribe(function(newValue) {
alert("The person's new name is " + newValue);
});
我目前正在学习 AngularJS,我想知道 AngularJS 中是否有与此等价的东西?我试过搜索这个,但没有任何运气。
AngularJS 中的作用域对象有一个特殊的方法叫做$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 范围页面上阅读更多文档。
希望有帮助!
对于由用户操作或应用程序事件触发的 API 调用和异步数据,您最好使用
$rootScope.$broadcast('updateSearch', value);
直接在服务函数的回调中并在您的控制器中利用它,例如:
$scope.$on('updateSearch', function(event,value) {
$scope.search = value;
});
您可以使用 $watch 检查范围对象的属性何时更改。