所以我剛開始使用AngularJS,除了一個小小的障礙之外,它看起來非常好。比方說,我有兩個指令,其中一個需要其他的,像這樣:AngularJS:templateUrl推遲控制器的構建,依賴代碼中斷
<outer>
<inner></inner>
</outer>
如果inner.html
前outer.html
負載,那麼有沒有:
angular.module('components', [])
.directive('outer', function() {
return {
restrict: 'E',
replace: true,
transclude: true,
scope: {},
link: function(scope) { ... },
controller: function($scope) { ... },
templateUrl: 'outer.html' // Note this
};
})
.directive('inner', function() {
return {
require: '^outer', // And this
restrict: 'E',
...
link: function(scope, element, attrs, outerCtrl) { ... },
templateUrl: 'inner.html'
};
});
在HTML像這樣用問題。<outer>
被正確轉換,並被分配一個範圍和一個控制器,並且<inner>
收到該控制器就好了。
如果模板負載以相反的順序,然而,<inner>
已創建<outer>
的控制器之前被鏈接,並且它失敗,錯誤消息‘錯誤:沒有控制器:外’。
我已經嘗試將服務器端負載延遲附加到inner.html
,只要首先加載outer.html
,任何地方都沒有問題。同樣,如果我內嵌outer
的模板(即使用template
而不是templateUrl
),那麼該模板將首先變得可用,並且這一切都非常出色。
有誰知道使用templateUrl
的方法是否需要其他指令?在我的實際代碼中,至關重要的是內部指令可以訪問外部控制器,並且寧願templateUrl
而不是template
,因爲前者將佈局與行爲分開,並且即使在行爲之後也可以更容易地配置模板代碼已經變大了。
在此先感謝,並對不起,如果這已經問過;我無法在Stack Overflow上找到任何等效的問題。
我有這個確切的問題,但沒有調整優先級幫助(不在1.0.5上,而不是在1.0.7上)。在我的情況下,這是'內在'取決於'外部'的控制器,並且沒有簡單的方法來打破這種依賴關係,因爲我有幾個'內在',做一些事情需要一些東西發生在別人身上(這是一種高級手風琴) 。 – ivarni 2013-08-09 12:21:59