我遇到了指令的api暴露問題,以便與控制器進行交互。Angular:使用templateUrl在指令中破壞編譯鏈接排序
有一個簡化的jsfiddle來描述我的結構。
問題是指令有templateUrl
屬性(我用template
替換它在上面),它導致加載模板異步(根據this question正確的行爲)。
結果指令的控制器,主控制器,因此指令的API函數doWork
未定義後(即使你把它包起來的東西,如$超時調用)被稱爲:
.controller('MainCtrl', function($scope, $timeout) {
$scope.api = {};
$scope.init = function() {
$timeout(function() {
$scope.api.doWork();
})
}
$scope.init()
})
還有就是涉及到的方法我介意 - 在指令的鏈接功能中使用事件,並訂閱$scope.api.doWork
到該事件。但我對使用事件並不滿意。此外,如果某些指令以暴露api的方式相互嵌套,則不清楚如何處理這種情況。 另一方面,可以用template
代替templateUrl
--但在模板複雜佈局的情況下,這也是一個非常糟糕的決定。
因此,我在解決這類問題的方法上留了一點點。解決這個問題的最佳方法是什麼?也許有另一種技術來揭露指令的api(我受到了Andrej Kaurin在thread中的回答的啓發)?