订阅AngularJS中的房产变更

时间:2013-06-19 19:45:32

标签: javascript angularjs

在knockoutJS中,可以订阅observable viewmodel属性的更改,例如:

myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});

我目前正在学习AngularJS,我想知道AngularJS中是否有相同的内容?我试过这个,但没有运气。

3 个答案:

答案 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检查范围对象的属性何时更改。

http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch