AngularJS : automatically detect change in model

前端 未结 2 1050
隐瞒了意图╮
隐瞒了意图╮ 2020-12-22 20:23

Suppose I wanted to do something like automatically run some code (like saving data to a server) whenever a model\'s values change. Is the only way to do this by setting som

2条回答
  •  北荒
    北荒 (楼主)
    2020-12-22 21:14

    In views with {{}} and/or ng-model, Angular is setting up $watch()es for you behind the scenes.

    By default $watch compares by reference. If you set the third parameter to $watch to true, Angular will instead "shallow" watch the object for changes. For arrays this means comparing the array items, for object maps this means watching the properties. So this should do what you want:

    $scope.$watch('myModel', function() { ... }, true);
    

    Update: Angular v1.2 added a new method for this, `$watchCollection():

    $scope.$watchCollection('myModel', function() { ... });
    

    Note that the word "shallow" is used to describe the comparison rather than "deep" because references are not followed -- e.g., if the watched object contains a property value that is a reference to another object, that reference is not followed to compare the other object.

提交回复
热议问题