AngularJS中的指令和静态DOM元素之间的区别

时间:2013-03-13 21:10:54

标签: javascript frameworks angularjs

我已经读过了 Compilation process, and directive matching 关于AngularJS Doc。

但我真的不明白指令。

示例:

我有静态HTML:

<div class="test test2" cid="549" sid="a5e3c4f8a9">text-text-text</div>

当我手动执行此操作时,我知道它只会在浏览器的解析时创建并调用一次。

但是当我使用相同的dom元素创建指令时会发生什么?

<x my-directive>text-text-text</x>

这是同样的效果吗?

我问这样一个新手问题,因为我在我的html页面上使用了200多个元素。 如果我将它们更改为单一指令:肯定会更容易管理它们。

并且没有问题,如果它在浏览器的编译时间只是慢,但在运行时发生了什么?

我很抱歉,如果qustion不是专业的话。我是Stackoverflow的新手。

谢谢

丹尼尔

1 个答案:

答案 0 :(得分:3)

如果我理解正确,您想知道AngularJS如何创建指令以及调用指令方法的次数。

当您创建指令(使用module.directive('myDirective', ...))时,您实际上只是创建一个定义。每次使用该指令(如<div my-directive>)时,AngularJS将运行指南中描述的过程:即,它将编译并链接每个用法。它必须是这种方式,因为指令不是孤立存在的;它不仅存在于调用它的$scope中,而且还可以使用元素属性和被转换的内容。定义发生一次,但每个实例都被编译和链接。

创建指令后,技术上已完成;如果您没有设置任何$watch$observe或事件绑定,那么您的“指令”现在只是link函数末尾DOM中的任何内容 - 不再有计算。换句话说,编译和链接后发生的事情完全取决于你。

回到你的例子:如果你在页面上使用200个相同的指令,该指令将被定义一次,但所有200将被单独编译和链接。但我不确定你提出的意思是什么。 背后的问题你的问题是什么?