$watch是一個scope函數(shù),用于監(jiān)聽模型變化,當(dāng)你的模型部分發(fā)生變化時它會通知你。
每個參數(shù)的說明如下:
watchExpression:監(jiān)聽的對象,它可以是一個angular表達(dá)式如'name',或函數(shù)如function(){return $scope.name}。
listener:當(dāng)watchExpression變化時會被調(diào)用的函數(shù)或者表達(dá)式,它接收3個參數(shù):newValue(新值), oldValue(舊值), scope(作用域的引用)
objectEquality:是否深度監(jiān)聽,如果設(shè)置為true,它告訴Angular檢查所監(jiān)控的對象中每一個屬性的變化. 如果你希望監(jiān)控?cái)?shù)組的個別元素或者對象的屬性而不是一個普通的值, 那么你應(yīng)該使用它
$watch性能問題
太多的$watch將會導(dǎo)致性能問題,$watch如果不再使用,我們最好將其釋放掉。
$watch函數(shù)返回一個注銷監(jiān)聽的函數(shù),如果我們想監(jiān)控一個屬性,然后在稍后注銷它,可以使用下面的方式:
var watch = $scope.$watch('someModel.someProperty', callback);
//...
watch();
代碼##
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="angular/angular.min.js"></script>
<!--<script src="angular/angular.js"></script>-->
</head>
<body ng-app="myApp" ng-controller="myController" >
<form>
starting: <input type="text" ng-model="funding.staringEs"/>
<br/>
recommendation:{{funding.needed}}
</form>
<script>
var app=angular.module("myApp",[]);
app.controller('myController',function($scope){
$scope.funding={staringEs:0,needed:0};
$scope.$watch('funding.staringEs',function(newValue,oldValue,scope){
$scope.funding.needed=$scope.funding.staringEs*122;
console.log("newValue",newValue,"oldValue",oldValue,'scope',scope.funding);
});
})
</script>
</body>
</html>