Javascript 订阅AngularJS中的属性更改
在knockoutJS中,可以订阅viewmodel属性的更改,例如:Javascript 订阅AngularJS中的属性更改,javascript,angularjs,Javascript,Angularjs,在knockoutJS中,可以订阅viewmodel属性的更改,例如: myViewModel.personName.subscribe(function(newValue) { alert("The person's new name is " + newValue); }); 我目前正在学习AngularJS,我想知道在AngularJS中是否有类似的东西?我尝试过搜索这个,但没有任何运气。您可以使用$watch检查scope对象的属性何时更改 AngularJS中的对象有一个名为
myViewModel.personName.subscribe(function(newValue) {
alert("The person's new name is " + newValue);
});
我目前正在学习AngularJS,我想知道在AngularJS中是否有类似的东西?我尝试过搜索这个,但没有任何运气。您可以使用$watch检查scope对象的属性何时更改 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
});
$scope.$watch('modelName', function(newValue, oldValue){
// Do anything you like here
}, true); // Add extra 'true' parameter to check for object equality
这允许您“观察”您的模型,并在需要时执行一些操作
另外一句话:如果你正在观察一个包含对象的模型,你应该使用额外的第三个参数,告诉AngularJS通过对象相等而不是引用来比较这两个值(因为引用不会改变,因此不会触发观察者),如下所示:
$scope.$watch('modelName', function(newValue, oldValue){
// Check if value has changes
if(newValue === oldValue){
return;
}
// Do anything you like here
});
$scope.$watch('modelName', function(newValue, oldValue){
// Do anything you like here
}, true); // Add extra 'true' parameter to check for object equality
您可以在页面上阅读更多文档
希望有帮助 对于由用户操作或应用程序事件触发的API调用和异步数据,最好使用
$rootScope.$broadcast('updateSearch', value);
直接在服务函数的回调中,并在控制器中利用它,如:
$scope.$on('updateSearch', function(event,value) {
$scope.search = value;
});
这就是观察物在Angular2中的工作方式