我有幾個非常相似的指令共享一些代碼。我正在尋找一種方法讓這些指令繼承該共享代碼。模板中的指令訪問控制器
我正在考慮的方法是讓每個指令的模板包含另一個帶有共享代碼的指令。有什麼方法可以訪問該模板的指令控制器?
app.directive('d1', function($compile) {
return {
restrict: 'E',
require: 'sharedCtrl', // Is anything like this possible?
template: '<shared></shared>',
link:function(scope,element,attr, sharedCtrl) {
var res = sharedCtrl.getResult();
}
}
});
app.directive('shared', function($compile) {
return {
restrict: 'E',
controller: function($scope, $element) {
var resultObject = sharedCode();
this.getResult = function() { return resultObject; };
}
link:function(scope,element,attr, sharedCtrl) {
}
}
});
或者,還有更好的方法來實現同樣的事情嗎?
編輯:共享代碼操縱DOM(它會注入一個傳單地圖,並且我想返回地圖的js對象),所以我認爲最好是在指令中保留DOM操作。
將共享代碼放在工廠中? –
http://stackoverflow.com/questions/15569168/injecting-service-to-directive –
從你的'shared'指令,它似乎只獲取一些數據。在這種情況下,我認爲你可以把它提取到一個「工廠」。 – Joy