我们什么时候使用指令的编译功能`preLink`?(When shall we use `preLi

2019-07-21 05:42发布

compile angularjs'指令的功能有两个功能: preLinkpostLink

预链接功能

子元素被链接之前执行。 没有安全做DOM转型,因为编译器链接功能将无法找到正确的元素联系起来。

联邮功能

子元素被链接后执行。 它是安全的DOM转型中的连接后功能。

它告诉我们不应该做preLink ,我不知道什么时候应该使用preLink ? 对于大多数的时候我只是用postLink 。 有,我们必须使用它的情况下?

Answer 1:

你需要几乎从来不使用preLink 。 可行的情况下,它是当你需要操纵范围的数据, 而不是DOM, 之前 link被执行功能(也是其他指令)。

雅各评论,你总是可以做到这一点从控制器太多,但有时它必须在指令本身的代码是比较合适的。

有一个关于指令的工作的优秀文章,其中的连接顺序很好地解释说: http://www.jvandemo.com/the-nitty-gritty-of-compile-and-link-functions-inside-angularjs-directives/

如果你需要的,为什么前联有时是必要的一个很好的例子,我建议你看一下角度指令本身的代码。 例如https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js



Answer 2:

一个preLink功能时使用的指令希望把东西放到一个共享的范围,以便它准备在他们的其他指令使用postLink功能。

角的形式指令,例如,创建一个包含所有输入项的对象。 自定义指令可以安全地在访问该对象postLink功能。



Answer 3:

我已经创建自定义的指令,其中包括其他指令时使用预链接。 就我而言,我的指令,其中包括应用角度UI引导的指令事先键入的内容到它的一些元素,并使用它自己的范围内的变量初始化功能,事先键入的内容的模板。

例如:

...
template:
    "<select ng-show='dropdown' class='form-control' ng-model='ngModel' ng-options='s for s in suggestions'></select>"
    + "<textarea ng-show='!dropdown' class='form-control' ng-model='ngModel' typeahead='s for s in suggestions |filter:$viewValue' typeahead-min-length='0' typeahead-editable='{{editable}}'></textarea>",
...

在这种情况下,角链接父之后的子指令,所以我需要使用预链接来设置预输入。 当我初始化的指令postLink功能$ scope.dropdown和$ scope.editable变量,我发现当预输入指令有联系,他们没有初始化,我不得不为其初始化进入预链接正确地使该指令工作。



文章来源: When shall we use `preLink` of directive's compile function?