2013-10-05 64 views
5

我很有趣,angular.js如何檢測模型是否已更改,以及處理此更改的一般角度工作流是什麼。我的意思是,在我更換模塊的一部分後,頁面上發生了什麼。angular.js如何檢測模型已更改

+6

與[此問題]類似(http://stackoverflow.com/q/12463902/893780)(其中一個答案指向[此解釋](http://docs.angularjs.org/guide/concepts #運行))。 – robertklep

回答

0

這是我的理解。糾正我,如果我錯了。這是雙向信息共享:)

如果你知道數據綁定實際上是如何工作的,那麼數據綁定並不是魔術。

爲了讓任何變量具有數據綁定功能,必須使用$ watch方法進行註冊。

$scope.$watch('aVarModel', function(newValue, oldValue) { 
    //update the DOM with newValue 
}); 

只要$ scope。$ digest被調用,所有通過$ watch的綁定數據都會被檢查。請注意,Angular不檢查範圍內的所有值,而只檢查使用$ watch方法註冊的值。如果模型未使用觀察器註冊,則不會被檢查。它比較舊值和新值以檢查是否有變化。如果它改變,它將觸發偵聽器功能(觀察者方法的第二個參數)。

您可能會問,您沒有使用$ watch註冊任何變量或調用$ digest檢查更改,但仍然存在數據綁定。爲什麼?

AngularJS有一堆內置的指令,實際上調用它後面的$摘要方法,並觀察變量使我們的工作更容易。例如:

<div ng-app ng-init="qty=1;cost=2"> 
    <b>Invoice:</b> 
    <div> 
    Quantity: <input type="number" min="0" ng-model="qty"> 
    </div> 
    <div> 
    Costs: <input type="number" min="0" ng-model="cost"> 
    </div> 
    <div> 
    <b>Total:</b> {{qty * cost | currency}} 
    </div> 
</div> 

在NG-模型指示內置實際登記數量和成本變數和呼叫$範圍觀察家$消化每次價值的變化沒有我們知道它。您可以創建自定義指令

忘了提及,{{}}中的每個表達式在編譯階段也會自動被監視。所以它會隨着它的值在應用程序中的任何地方改變而改變。

+0

那麼如何角度$摘要調用或更改? – yozawiratama

相關問題