如何在AngularJS中进行绑定和消化?

时间:2012-09-17 16:57:35

标签: angularjs

将AngularJS与其他JavaScript-MVC框架区分开来的一件事是它能够使用绑定将绑定值从JavaScript回显到HTML。当您为$ scope变量赋值时,Angular会“自动”执行此操作。

但这有多自动?有时,Angular不会接受更改,所以我需要调用$ scope。$ apply()或$ scope。$ digest()来通知angular拾取更改。有时,当我运行其中任何一种方法时,它会抛出一个错误,并说已经在进行摘要。

由于绑定({{}}括号或ng属性中的任何内容)都与eval一起回应,这意味着Angular会不断轮询$ scope对象以查找更改,然后执行eval将这些更改推送到DOM / HTML?或者AngularJS以某种方式找出了使用魔术变量来触发变量值变化或分配时触发的事件?我从来没有听说过所有浏览器都完全支持它,所以我对此表示怀疑。

AngularJS如何跟踪它的绑定和范围变量?

1 个答案:

答案 0 :(得分:64)

除了Mark发现的documentation section之外,我认为我们可以尝试列举所有可能的变化来源。

  1. 用户与HTML输入的互动('text''number''url''email''radio''checkbox')。 AngularJS有inputDirective。 'text','number','url'和'email'输入绑定listener handler表示'input'或'keydown'事件。侦听器处理程序calls scope.$apply。 'radio'和'checkbox'为click事件绑定类似的处理程序。
  2. 用户与select元素的互动。 AngularJS的selectDirective在'change'事件中具有类似的行为。
  3. 使用同时执行$timeout service$rootScope.$apply()进行定期更改。
  4. eventDirectives(ngClick等)也使用scope.$apply
  5. $ http也使用$rootScope.$apply()
  6. AngularJS世界之外的变化应该使用范围。$ apply如您所知。