一个angularjs指令可以要求自己吗?

Gil*_*man 5 angularjs angularjs-directive

指令是否需要自己?这是一个例子:

app.directive('menu', function () {
  return {
    restrict: 'E',
    require: '?^menu',
    link: function(scope, element, attrs, ctrl) {
      console.log('ctrl: ', ctrl);

      if (ctrl) {
        element.addClass('nested');
      } else {
        element.addClass('notnested');
      }
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

在我的测试中它似乎不起作用(ctrl总是未定义).看到插件


顺便提一下,在回答了这个问题后,我发现在这种情况下,caret(^)没有效果,传递给link函数的控制器总是实例自己的控制器.[ plunk ]

dub*_*dub 5

您应该直接定义控制器函数以将指令API暴露给其他指令:

app.directive('menu', function () {
  return {
    restrict: 'E',
    require: '?^menu',
    controller: function($scope){  },
    link: function(scope, element, attrs, ctrl) {
      console.log('ctrl: ', ctrl);

      if (ctrl) {
        element.addClass('nested');
      } else {
        element.addClass('notnested');
      }
    }
  };
}); 
Run Code Online (Sandbox Code Playgroud)

请参阅http://plnkr.co/edit/cKFuS1lET56VOOYD5rrd?p=preview