Angular require,抄别的

  1. require参数的值可以用下面的前缀进行修饰,这会改变查找控制器时的行为:

    ?

    如果在当前指令中没有找到所需要的控制器,会将null作为传给link函数的第四个参数。

    ^

    如果添加了^前缀,指令会在上游的指令链中查找require参数所指定的控制器。

    ?^

    将前面两个选项的行为组合起来,我们可选择地加载需要的指令并在父指令链中进行查找。

    没有前缀

    如果没有前缀,指令将会在自身所提供的控制器中进行查找,如果没有找到任何控制器(或具有指定名字的指令)就抛出一个错误。

  2. 在自定义Angular指令时。

    举个简单的例子,假如我们现在需要编写两个指令,在linking函数中有很多重合的方法,为了避免重复,我们可以将这个重复的方法写在第三个指令的 controller中,然后在另外两个需要的指令中require这个拥有controller字段的指令,最后通过linking函数的第四个参数就可以引用这些重合的方法。

  3. var app = angular.modeule('myapp',[]);
  4. app.directive('common',function(){
  5. return {
  6. ...
  7. controller: function($scope){
  8. this.method1 = function(){
  9. };
  10. this.method2 = function(){
  11. };
  12. },
  13. ...
  14. }
  15. });
  16. app.directive('d1',function(){
  17. return {
  18. ...
  19. require: '?^common',
  20. link: function(scope,elem,attrs,common){
  21. scope.method1 = common.method1;
  22. ..
  23. },
  24. ...
  25. }
  26. });