0
我無法理解如何從指令繼承父控制器。我已經設置了一個非常簡單的示例,其中包含一個名爲MainCrtl
的控制器。該控制器負責創建和刪除一系列名爲inner
的指令。事情是,我希望能夠從我的指令中訪問MainCtrl
的方法,但我從瀏覽器控制檯收到錯誤。下面是代碼:AngularJS中的控制器/指令繼承
app.js
angular
.module('myApp', ['ngRoute'])
.config(function($routeProvider){
$routeProvider
.when('/', {
templateUrl: 'main.html',
controller: 'MainCtrl',
controllerAs: 'main'
});
});
腳本/控制器/ main.js
angular.module('myApp')
.controller('MainCtrl', function() {
var self = this;
var index = 1;
this.inners = [];
this.init = function() {
self.addInner();
};
this.addInner = function(){
self.inners.push({
name: 'Inner ' + index
});
index++;
};
this.init();
});
視圖/ main.html中
<p>main</p>
<button type="button" ng-click="main.addInner()">Add Inner</button>
<inner ng-repeat="inner in main.inners" data="inner"></inner>
腳本/指令/內.js
angular.module('myApp')
.directive('inner', function(){
return {
restrict: 'E',
templateUrl: 'inner.html',
require: ['^MainCtrl', 'inner'],
controllerAs: 'inner',
bindToController: true,
scope: {
data: '='
},
controller: function(){ ... },
link: function(scope, element, attrs, ctrls){ ... }
}
});
這是我從我創建了一個plunker here瀏覽器控制檯
[$compile:ctreq] Controller 'MainCtrl', required by directive 'inner', can't be found!
得到錯誤。請幫忙。
嗯這就是我害怕的,似乎我應該創建一個新的指令來分享功能。但我必須說我不同意你的最後一句話,一個指令實際上可以在require屬性中引用它自己。我知道是無關的,但是,你怎麼能引用一個兄弟指令的控制器? – 2015-02-10 06:06:06
爲了澄清,指令實例不能引用它自己。但是兩個相同類型的指令實例可以。 – 2015-02-10 06:47:13
您也可以使用require來引用同級。用'^'來引用一個父母或兄弟姐妹,只把它留給兄弟姐妹。 '?'將使其成爲可選。我認爲'^^'只是父母,但沒有記錄..不記得他們是否添加了它。 – 2015-02-10 06:55:05