angular学习笔记2015728

1.将$parse服务注入到控制器中,然后调用就可以实现手动解析表达式。

2.如果指令使用了transclude参数,那么在控制器(下面马上会介绍)中就无法正常监听数据模型的变化了

3.由于指令可以require其他指令所使用的控制器,因此控制器常被用来放置在多个指令间共享的动作。

如果我们希望将当前指令的API暴露给其他指令使用,可以使用controller参数,否则可以

使用link来构造当前指令元素的功能性。如果我们使用了scope.$watch()或者想要与DOM元素

做实时的交互,使用链接会是更好的选择。

技术上讲,$scope会在DOM元素被实际渲染之前传入到控制器中。在某些情况下,例如使
用了嵌入,控制器中的作用域所反映的作用域可能与我们所期望的不一样,这种情况下,$scope
对象无法保证可以被正常更新。

4.

require参数的值可以用下面的前缀进行修饰,这会改变查找控制器时的行为:
?
如果在当前指令中没有找到所需要的控制器,会将null作为传给link函数的第四个参数。
^
如果添加了^前缀,指令会在上游的指令链中查找require参数所指定的控制器。
?^
将前面两个选项的行为组合起来,我们可选择地加载需要的指令并在父指令链中进行查找。
没有前缀
如果没有前缀,指令将会在自身所提供的控制器中进行查找,如果没有找到任何控制器(或
具有指定名字的指令)就抛出一个错误。

5.尽管元素可以被多个指令所支持或修饰,

这些指令本身的模板中也可以包含其他指令,但只有属于最高优先级指

令的模板会被解析并添加到模板树中。这里有一个建议,就是将包含模板的指
令和添加行为的指令分离开来。如果一个元素已经有一个含有模板的指令了,
永远不要对其用另一个指令进行修饰。只有具有最高优先级的指令中的模板会
被编译。

原文地址:https://www.cnblogs.com/xiaokangzhu/p/4685643.html