2016-05-17 21 views
0

現在我正在開車自己堅果試圖找到一個簡單的方法來做到這一點,但我有一些很舊的代碼工作,我能做的非常有限重新安排,並且因爲它代表我有一個控制器in angular,我將如何訪問在一個模塊中定義的控制器,在另一個模塊中的指令中定義的鏈接函數中

angular.module('a.module').controller('SomeController'...

,並從鏈接功能中像

angular.module('b.module', ['a.module']) 
angular.module('b.module').directive('aDirective',() => { 
    return: { 
    controller: (scope) => {....}, 
    link: (scope, elem, attrs) {...} 
    } 
}); 

定義的指令模塊b中的指令,我想訪問Som eController及其功能。我已經嘗試過沒有運氣的$指令服務,並且不確定我可以使用定義了控制器的指令做很多事情。

+0

爲什麼你不能只注入一些控制器? –

回答

0

根據您的DOM結構以及您試圖訪問/傳遞的內容,如果您的指令是綁定到控制器的元素的子元素,則可以使用獨立範圍。你會使用隔離範圍調節劑提供了從控制器到你的指令的方法和/或數據的「@」,「=」或「&」,就像這樣:

angular.module('a.module').controller('SomeController', [ 
    '$scope', 

    function ($scope) { 
     $scope.text = "This is my text"; 

     $scope.func = function() { 
     alert("Called from a.module"); 
     } 
    } 
]); 

angular.module('b.module').directive('aDirective', function() { 
    return { 
    scope: { 
     text: "@", 
     func: "&" 
    }, 
    template: '<div ng-click="func()">{{ dir }}</div>', 
    link: function (scope, element, attrs) { 
     scope.dir = scope.text; 
    } 
    } 
}) 

和DOM:

<div ng-controller="SomeController"> 
    <a-directive func="func()" text="{{ text }}"></a-directive> 
</div> 

下面是一個示例Plunkr:http://plnkr.co/edit/kGicc8h79DGn1QvmjJzg

然而,謹慎使用這種方式,只有當你想給你的指令,一些特定的行爲。如果您的控制器中有業務邏輯可以/應該由其他控制器或指令使用,請不要將其保存在控制器中。相反,將這些函數提取到一個服務中並將該服務注入到您的指令/控制器中。

相關問題