2

下面的代码仅在页面最初加载时记录。怎么了?

<!DOCTYPE html>
<html ng-app>
    <head>
        <title>Test</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>
    </head>
    <body>
        <div ng-controller="PageController">
            <p ng-bind="model.header"></p>
            <p>Value: <input ng-model="model.header" /></p>
        </div>
        <script>
            function PageController($scope) {
                $scope.model = {};
                $scope.model.header = 'Header';

                $scope.onModelChange = function (newValue, oldValue, scope) {
                    console.log('model changed > newValue: ' + newValue + ' > oldValue: ' + oldValue);
                };

                $scope.$watch($scope.model, $scope.onModelChange, true);
            }
        </script>
    </body>
</html>
4

2 回答 2

14

$watch 的第一个参数应该是范围属性本身

$scope.$watch("model", $scope.onModelChange);

而且您不需要对此属性启用深度监视(第三个参数)

于 2013-09-17T15:37:43.180 回答
5

正如 Florian F 所提到的,第一个参数是您要查看的范围属性的字符串。

$scope.$watch("model", $scope.onModelChange, true);

但是,当您正在观察对 model.header 的更改时,确实需要设置“深度”参数。如果不为真,则只有在模型对象引用本身更新时才会触发监视。

这是一个同时显示浅表和深表的 plunkr,其中浅表不起作用,因为它只观察模型对象引用。 http://plnkr.co/edit/ejMc2pBjIFD9aX6PBsY1

于 2013-09-17T15:59:23.663 回答