我有一个require属性的指令:
require: '^testBox'
现在我想在我的指令的控制器内获得testBox控制器.我该怎么办?
我试图这样做:
controller: function(){
this.testBox.user
}
但看起来它不起作用.
我很清楚如何在链接功能中获得所需的控制器.但有没有办法在不使用链接的情况下将其置于控制器内?
最佳答案 这仍然是
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();
}
});
}
但是,您也可以使用链接功能.所需的控制器将作为第四个参数注入.