2013-07-30 46 views
3

我有一個反覆出現的問題,我無法使用包含在通過$ http檢索的模板部分內的指令。我假設我需要使用$compile$apply來模板,以獲得指令的工作。下面的代碼嘗試使用$從$http上返回的數據應用,但它不工作:

$http({ 
    url: 'get/data', 
    method: "POST" 
}) 
.success(function (data, status, headers, config) { 
    $scope.$apply(function() { 
     $scope.data = data; 
    }); 
}) 
.error(function (data, status, headers, config) { $scope.status = status; }); 

返回值(data)就是一個包含一些HTML,在它有幾個指令的模板。如果我寫

.success(function (data, status, headers, config) { $scope.data = data } 

然後加載模板,但模板中的任何指令都不起作用。所以我想我需要使用$apply$compile將指令綁定到角度。顯然,我在理解angular時缺少一些基本的東西,以及如何將指令綁定到動態加載的模板中。任何幫助將非常感激。

+0

你最好爲這樣做創建一個指令,因爲操縱Dom不是角度的方式。 – zsong

回答

-1

你可以只通過templateUrl(http://docs.angularjs.org/guide/directive)加載模板。 其基本思想是,你在js中編寫指令,它在單獨的文件中匹配html,它可以通過templateUrl包含在該指令中。

0

你是正確的,你需要使用$編譯服務來處理動態加載模板指令。 $ compile處理一些html並返回一個鏈接函數。當使用範圍調用鏈接函數時,它會返回帶有運行指令的完全編譯和鏈接模板。然後必須將該模板插入到實時DOM中。正如zsong指出的那樣,這意味着所有這些都應該在一個指令中完成,這是Angular中DOM操作的一個領域。在一個行:

container.html($compile(loadedHtml)(scope)) 

容器處於將包含動態模板的DOM元素。我們將其html設置爲將編譯後的html鏈接到範圍的結果。