2012-07-11 62 views
17

我有一個非常簡單的指令,我想從單獨的HTML文件中加載模板。我希望HTML替換指令,因此我將replace: true屬性添加到指令中。但是,當我這樣做時,模板根本不包括在內。AngularJS - 爲什麼不能取代:真正的templateUrl屬性?

我創建了一個jsFiddle,您可以在其中看到此內容。如果您使用Firebug或其他東西來檢查DOM,您可以看到,只使用template屬性時,它會替換該元素。如果你脫掉replace: true,你可以看到templateUrl的HTML附加到foo元素。但是,只要我將replace: truetemplateUrl相加,我就會看到DOM中的<foo></foo>

是否有某些原因導致您無法將這兩個屬性結合使用?我遠離JavaScript專家,所以關於這裏發生的事情的任何信息將不勝感激。

+0

看到[這裏](https://github.com/angular/angular.js/issues/1459)如果你在使用表 – 2013-06-13 14:35:01

回答

34

確保您的html在templateUrl中的內容只有一個根元素。這不是一個問題,當replace: false但是當replace: true,你會看到這個控制檯錯誤(使用Firebug)成爲一個問題:

Error: Template must have exactly one root element. 

這裏是它not working一個的jsfiddle(有兩個根元素),而另一個與它working

+8

我的html文件在我的根級元素之外有一些註釋。我認爲評論是好的,但是當我刪除所有外部評論,只有一個外部的div,它工作得很好。謝謝! – dnc253 2012-07-11 21:06:34

+3

任何人都有使用表格行標籤的運氣?如果用tr td替換工作示例,它將停止工作... – toxaq 2013-08-04 23:33:45

+0

@toxaq對於表格行標記,我將'E'類型指令切換爲'A'類型指令。 – JisuKim82 2015-10-21 21:51:15

1

好問題。如果我沒有記錯的話,你想用「transclude」

http://jsfiddle.net/dandoyon/AsVp8/1/

Transclude允許您使用的是在HTML混合模板。您可能希望再看一遍該文檔並尋找這個選項。

乾杯!

+0

如果我沒有弄錯,不會跨越只是讓你把標籤的內容進入最終結果?這不是我想要的。我只希望我的標記完全被模板中的內容所取代。在我的jsFiddle中,這樣的部分只是爲了確保標籤的這部分內容不見了。 – dnc253 2012-07-11 19:57:52

+0

好的。那麼http://jsfiddle.net/dandoyon/AsVp8/2/(我認爲是你之前的)工作並取代了那裏。我錯過了什麼嗎?你正在使用哪種瀏覽器? IE確實需要特殊的考慮需要發生的IE瀏覽器。讓我知道這是什麼問題。我爲angular-ui寫了一些東西來自動化我們的指令。 https://github.com/angular-ui/angular-ui/blob/master/common/ieshiv/src/ieshiv.js – 2012-07-12 21:31:38

+0

問題在於註釋掉了templateUrl屬性。有沒有辦法讓我有jsFiddle打我的本地html文件,所以我只是把它可能打的一些URL。通過Gloopy提到的信息,我能夠發現這是導致問題的根級div之外的註釋。 – dnc253 2012-07-13 01:31:39

相關問題