TL; DR: 在僞指令的templateUrl方法中使用attr值時,attr在使用子僞指令時未被插值。最終結果是文字{{attrName}}/something.html
。帶動態templateUrl方法失敗的嵌套僞指令
全文: 我有一個外部指令,其中包括內部指令。訣竅是,這些內部指令也是可以在沒有父母知識的情況下自己生活的項目。
的規則很簡單:
- 如果一個項目是單獨使用,它的配置必須在它通過將屬性傳遞。
- 如果項目包含在其父項中,則必須通過父項屬性將其配置傳遞給它
- 我無法將完整的組合HTML寫入index.html。它必須在飛行中加載。他們的規則。但是,這樣做可以解決問題。
- 該URL必須是動態的,並且父級必須能夠傳遞此信息而不依賴於範圍繼承 - 父級可能不在此處。
- 第三方網站無法告訴我在哪裏指出這些使用JS。他們唯一的工具就像index.html中的HTML一樣。屬性配置很好。
的Index.html:
<div zoo feeding-time="8am" template-base="/templates"></div>
OR - index.html的也可能是:大猩猩可以顯式地指定ATTR值,因爲它不是繼承
<div gorilla template-base-url="/templates"></div>
動物園.html - 它將自己的配置傳遞給大猩猩
<div gorilla template-base-url="{{templateBaseUrl}}"></div>
動物園directive.js
angular.module("app").directive("zoo", [function() {
return {
restrict: "A",
scope: true,
templateUrl: function(element, attrs) {
// THIS ONE NEVER FAILS BECAUSE ITS NEVER INTERPOLATED
var base = attrs.templateBaseUrl;
return base + "/zoo.html";
},
link: function(scope, element, attrs) {
// its my job to give gorilla a templateURL in this case
scope.templateBaseUrl = attrs.templateBaseUrl;
}
};
}]);
gorilla.html
angular.module("app").directive("gorilla", [function() {
return {
restrict: "A",
scope: true,
templateUrl: function(element, attrs) {
// THIS ONLY FAILS WHEN INCLUDED BY ZOO.HTML
// AND THEN, ONLY SOMETIMES. RACE CONDITION? PRIORITY?
// DOES NOT FAIL WHEN INCLUDED BY INDEX.HTML DIRECTLY
var base = attrs.templateBaseUrl;
return base + "/gorilla.html";
}
};
}]);
這工作。有時。有時,從tempateUrl
方法中使用字面{{templateBaseUrl}}
。我只能看到,當attrs.templateBaseUrl
被大猩猩的templateUrl
方法使用時,attrs.templateBaseUrl
它尚未被插值。
因此,gorilla.link()
在插入{{templateBaseUrl}}
和kaboom之前運行。 404 {at {{templateBaseUrl}}/gorilla.html「
我該如何避免這種情況?
https://docs.angularjs.org/error/ $ compile/tpload?p0 =%7B%7BtemplateBaseUrl%7D%7D%2Fgorilla。html
我有這個baseUrl東西在每個項目依賴的提供者,但它具有與此簡化版本相同的效果。它必須是解析順序問題。
'templateUrl'函數運行的屬性值進行插值之前,你必須「範圍」之前。您應該使用inner指令的鏈接函數來構造模板或使用'ng-include'並動態添加模板路徑。此外,您應該使用'require'來獲取父級的控制器實例,並以這種方式獲取模板值。 – 2015-01-20 22:38:28
有趣的問題 - 當我回答這個問題時,我學到了一些東西 - 讓我知道如果我的答案留下任何不清楚的東西,並且重要的是,如果它有效的話! – 2015-01-20 23:44:30
我擺弄的要求,但大猩猩不需要動物園。他們可能只是在瘋狂地漫遊,所以不需要。相反,我使用由任何人設置的工廠值順序,如果有的話,attr如果沒有工廠值 – oooyaya 2015-01-21 03:13:11