Angular中使用$watch監(jiān)聽object屬性值的變化(詳解)
Angular中的$watch可以監(jiān)聽屬性值的變化,然后并做出相應(yīng)處理。
常見用法:
$scope.$watch("person", function(n, o){
//todo something...
})
但是對于一個對象中的某個屬性值變化時,$watch似乎不管用了。
示例代碼:
<body>
<div ng-controller="mainCtrl">
<input id="myText" type="text" ng-model="person.name"/>
<h2>{{person}}</h2>
<h2>Status: {{status}}</h2>
</div>
<script>
angular.module('myApp', [])
.controller('mainCtrl', function ($scope) {
$scope.person = {
name:"allen",
age:21
}
$scope.$watch("person", function(n, o){
//取消第一次加載時的監(jiān)聽響應(yīng)
if(n == o){
return;
}
$scope.status = "changed"
})
})
</script>
</body>
我們?yōu)檩斎肟蚪壎藀erson對象的name屬性,然而當(dāng)我們改變輸入框的值時候,{{person}}確實改變了,然而并沒有出現(xiàn)我們想要的change字符。
效果:

我們需要為$watch方法額外添加一個true參數(shù),使之達(dá)到我們想要的效果:
$scope.$watch("person", function(n, o){
if(n == o){
return;
}
$scope.status = "changed";
},true)
$watch方法完整的使用方式是這樣的:
$watch(watchExpression, [listener], [objectEquality]);
第一個是監(jiān)聽的參數(shù)名稱,剩下兩個可選參數(shù)分別為處理函數(shù)和是相等比較的方式,對于后者文檔如是說:Compare for object equality using angular.equals instead of comparing for reference equality. 即是否使用angular.equals方法進(jìn)行比較。
如此效果變?yōu)椋?/strong>

以上這篇Angular中使用$watch監(jiān)聽object屬性值的變化(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
AngularJS學(xué)習(xí)筆記之ng-options指令
ng-options是angular-1.3新出的一個指令,這篇文章就來介紹這個指令的用法.有需要的小伙伴可以參考下。2015-06-06
詳解創(chuàng)建自定義的Angular Schematics
本文對 Angular Schematics 進(jìn)行了介紹,并創(chuàng)建了一個用于創(chuàng)建自定義 Component 的 Schematics ,然后在 Angular 項目中以它為模板演練了通過 Schematics 添加自定義的 Component,感興趣的小伙伴們可以參考一下2018-06-06
Angularjs過濾器實現(xiàn)動態(tài)搜索與排序功能示例
這篇文章主要介紹了Angularjs過濾器實現(xiàn)動態(tài)搜索與排序功能,涉及AngularJS過濾器相關(guān)搜索、查詢、排序操作技巧,需要的朋友可以參考下2017-12-12
angular和BootStrap3實現(xiàn)購物車功能
這篇文章主要為大家詳細(xì)介紹了angular和BootStrap3實現(xiàn)購物車功能的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01

