2013-09-30 83 views
1

我有一個部分,它有一個指令,該指令使用編譯的HMTL-as-a-string內部指令在循環中呈現一堆東西。這個HTML-as-a-string本身包含一個ng-include,它不渲染出來。AngularJS在部分內部的循環內部編譯內部模板

請參閱我jsfiddle example

基本上,這不包括template2.html

element.html('<span>The name is ' + scope.content.name + '!</span><div ng-include src="template2.html"></div><br>'); 

任何指針將不勝感激。

謝謝!

回答

4

WORKING DEMO

只需要寫在DOCS

src=" \'template2.html\'" 


var linker = function(scope, element, attrs) { 
    element.html('<span>The name is ' + scope.content.name + '!</span><div ng-include src=" \'template2.html\'"></div><br>'); 
    $compile(element.contents())(scope); 
}; 

更多信息

+2

爲了防止上述情況不明顯:更改是引用ng-include src,因爲它是一個常量,不在查找範圍內查找。相關的[文檔中的行](https://github.com/angular/angular.js/blob/c0ad2efb24e4fffff6cb503ca821fe7e0bd4618b/src/ng/directive/ngInclude.js#L35) – timruffles

3

維諾德的回答以上(更換src="template2.html"src="\'template2.html\'")是正確的,但我會建議使用一個實際的模板,而不是在鏈接函數中手動編譯模板。在你的例子中,你實際上並沒有收到雙向綁定的好處。您只需要編譯函數的html輸出,並且如果底層數據發生更改,它將永遠不會更新。這裏就是你們的榜樣改裝後,顯示綁定(和維諾德的模板固定):

http://jsfiddle.net/kf3vZ/5/

注意,如果您在更改任何的複選框的值,在指令值不改變。

現在,這裏是一個使用template參數指令版本:

http://jsfiddle.net/kf3vZ/7/

現在,如果你改變了文本字段,該指令值也將改變。

另外要注意的,因爲你已經在使用script標籤爲你的模板,你可以在你的指令與templateUrl取代template並提供腳本模板的id

+0

謝謝你的回答。我相信我很快就會遇到這種情況,因爲我已經克服了第一個障礙,所以我只想回到這裏尋求建議。 – opyate