为什么我需要一个范围。$ apply从另一个编译指令?

时间:2014-02-12 03:29:48

标签: javascript angularjs

为什么我需要一个范围。$申请编译指令的范围以绑定到它的模板?

相关的plunker在这里: http://plnkr.co/edit/t3zF1A0BviItmbx9J7ii?p=preview

2 个答案:

答案 0 :(得分:2)

并不是scope.$apply上需要myDirective,而是你使用jQuery / jqLit​​e函数(append)添加新指令而Angular不知道它需要启动另一个消化周期。

请在此处查看我的更改,其中我移动了scope.$apply以涵盖第一个指令中的append方法,结果是相同的:

http://plnkr.co/edit/fAAHOj?p=preview

答案 1 :(得分:0)

有两件事:

  1. 在角度环境中发生了事件,您不需要应用这些更改,因为Angular会自动触发摘要周期,然后应用更改。

  2. 当您从Angularjs的环境外部进行一些更改时,在这种情况下,需要明确告知angular已发生更改。因此我们写,$scope.$apply(); 即使在指令中,如果使用角度函数进行更改,也不需要应用。但是如果您使用其他库来引发事件,则需要应用更改。