为什么$ watch在模型更改时不会更新

时间:2016-02-14 18:49:05

标签: javascript angularjs

为什么每次模型更改时手表都不会记录?

为什么输入不是以值测试开始的?



(function () {
    'use strict';


    // Create the application.
    var app = angular.module('tabApplication', []);

    // Creat the tabs controller.
    app.controller('tabController', ['$log', '$scope', function ($log, $scope) {
        $scope.myName = 'test';
        $log.log($scope.myName);
        
        $scope.$watch('myName', function(newValue, oldValue) {
            $log.log(newValue, oldValue); 
        });


    }]);
}());

<!DOCTYPE html>
<html lang="en-US">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
<body>

<div ng-app="tabApplication" ng-controller="tabController as tabC">
	<p>Name : <input type="text" ng-model="tabC.myName"></p>
	<h1>Hello {{tabC.myName}}</h1>
</div>


</body>
</html>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:4)

您是否尝试过观看字符串'tabC.myName',而不是正在观看'myName'

$scope.$watch('tabC.myName', function(newValue, oldValue) {
    $log.log(newValue, oldValue); 
});

答案 1 :(得分:2)

ng-model="tabC.myName"没有绑定到$scope.myName变量,这就是输入在开头显示为空而不是'test'的原因。

尝试ng-model="myName"代替;)

答案 2 :(得分:1)

正如cl3m回答所指出的那样,因为你使用控制器作为语法,你必须注意'tabC.myName'

另一种方法是将范围保留在控制器中(即将控制器作为构造函数)使用this来设置变量,并导入$scope以使用$watch功能

(function () {
    'use strict';


    // Create the application.
    var app = angular.module('tabApplication', []);

    // Creat the tabs controller.
    app.controller('tabController', ['$log', '$scope', function ($log, $scope) {
        this.myName = 'test';
        $log.log(this.myName);

        $scope.$watch('tabC.myName', function(newValue, oldValue) {
            $log.log(newValue, oldValue); 
        });


    }]);
}());