我寫了一個應用程序來理解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