這對我來說總是一個有趣的問題。我喜歡以我對這個常見案例的解決方案來玩弄狂野的一面。
首先,我退後一步,給controllerAs查看語法的角度風格指南(https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#controlleras-controller-syntax)
建議使用此語法,你可以定義你的指令爲:
var directive = {
require: '^myParentDirective',
restrict: 'EA',
controller: 'MyController as myCtrl',
templateUrl: 'super/awesome/app/my/my.directive.html',
scope: {
myProp: '='
}, // isolate scope
link: link
};
function link(scope, element, attr, myParentCtrl) {
scope.myCtrl.myParent = myParentCtrl;
}
漁獲(總是有一個問題):
請記住,指令的控制器是在鏈接函數被調用之前構造的。所以你不能指望myParent屬性在控制器構建期間執行的代碼中被解析。
function MyController($scope) {
var _self = this;
_self.myParent.register(_self); // myParent is not defined
}
而是等到你確信myParent解決
function MyController(scope) {
var _self = this;
_self.initialize = initialize;
return;
function initialize() {
_self.myParent.register(_self); // myParent might be defined
}
}
然後像做
function link(scope, element, attr, myParentCtrl) {
scope.myCtrl.myParent = myParentCtrl;
scope.myCtrl.initialize();
}
讓我知道如果這能幫助,大錯特錯,或者如果您需要更多澄清。
(另外,請原諒語法錯誤)
我相信你有這樣做的鏈接,如需要搜索指令和它們各自的控制器DOM做控制器查找。 –