我写了一个应用程序来理解Angular $scope.$watch()
。但是在这样做的时候遇到了一个我无法理解的问题。
使用以下代码,我期待input
框中的值正在更改语句“Data is changing !!”将被记录到控制台。
<!DOCTYPE html>
<html lang='en' ng-app="app">
<head>
<meta charset="utf-8">
<title>My $Scope.$watch demo</title>
</head>
<body>
<div ng-controller="MainController">
<input ng-model='myData.val'>
<h1>{{myData.val}}</h1>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
<script type="text/javascript">
angular.module('app', [])
.controller('MainController', ['$scope', function($scope){
$scope.myData = {};
console.log($scope.myData);
$scope.myData = { val:"Bablo"};
console.log($scope.myData.val);
$scope.$watch('$scope.myData.val', function(){
console.log("Data is changing!!");
});
}]);
</script>
</body>
</html>
但是我没有看到我所期待的,但是当我改变了$scope.$watch()
参数myData.val
(以前它是$scope.myData.val
),它开始工作的罚款。为什么这样?
如果我通过整个$scope.myData.val
而不是mydata.val
,这里有什么问题?
得到变量字符串摆脱'$ scope.'。http://plnkr.co/edit/czqDzJ28TiYA6iDfOvsP?p=preview – charlietfl
但是为什么它必须这样做,这是为什么我要求!! –
因为这个变量暗示着'$ scope'的属性已经在'internal'的内部被$ watch# – charlietfl