一尘不染

绑定和摘要在AngularJS中如何工作?

angularjs

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

但是,这有多自动化?有时,Angular不会接受更改,因此我需要调用$ scope。$ apply()或$ scope。$
digest()来通知angular来获取更改。有时,当我运行这些方法中的任何一个时,都会引发错误并指出摘要已在进行中。

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

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


阅读 190

收藏
2020-07-04

共1个答案

一尘不染

我认为,除了Mark发现的文档部分外,我们还可以尝试列举所有可能的变更来源。

  1. 用户与HTML输入(“文本”“数字”“ URL”“电子邮件”“无线电”“复选框”)的交互。AngularJS具有inputDirective。“文本”,“数字”,“ URL”和“电子邮件”输入为“输入”或“按键按下”事件绑定侦听器处理程序。侦听器处理程序调用scope。$ apply。’radio’和’checkbox’为click事件绑定了类似的处理程序。
  2. 用户与选择元素的交互。AngularJS的selectDirective在’change’事件上具有类似的行为。
  3. 使用$ timeout服务的定期更改也可以执行$ rootScope。$ apply()
  4. eventDirectives(ngClick等)也使用scope。$ apply
  5. $ http还使用$ rootScope。$ apply()
  6. 众所周知,AngularJS之外的更改应使用scope。$ apply。
2020-07-04