angularjs – 在指令控制器中访问控制器的正确方法是什么?

我有一个require属性的指令:

require: '^testBox'

现在我想在我的指令的控制器内获得testBox控制器.我该怎么办?

我试图这样做:

controller: function(){
  this.testBox.user
}

但看起来它不起作用.
我很清楚如何在链接功能中获得所需的控制器.但有没有办法在不使用链接的情况下将其置于控制器内?

Code on plunker.

最佳答案 这仍然是
open issue.所以目前你不能只将所需的控制器注入指令控制器.我已经更新了你的
Plunker.这肯定有点hacky但问题是;您无法在前置链接或后置链接功能中将TextBoxCtrl暴露给UserCtrl,因为控制器首先被执行.所以我的想法是使用观察者来观察名为textBox的范围变量.一旦定义了值,我在UserCtrl上声明一个变量并删除观察者.现在您可以在模板中使用它,如下所示:

{{ user.textBox.name }}

以下是链接函数的代码和用户指令的控制器:

link: function($scope, $element, $attrs, ctrl) {
  $scope.textBox = ctrl
},
controller: function($scope) {
  var vm = this;

  var watcher = $scope.$watch('textBox', function(newVal) {
    if(newVal) {
      vm.textBox = newVal;
      watcher();
    }
  });
}

但是,您也可以使用链接功能.所需的控制器将作为第四个参数注入.

点赞