2013-10-05 63 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

相关问题