2016-06-23 94 views
0

這是我的第一個問題,所以我希望我可以解釋這種情況 angularJs文檔here討論了將指令templateUrl作爲函數動態返回。還有一個Plunkler現場演示here如何使用範圍動態地更改angularjs自定義指令templateUrl

.directive('....', function() { 
    return { 
    templateUrl: function(elem, attr){ 
     return **.... scope.Somthing ...**; 
    } 
    }; 
}); 

功能並不需要一個範圍參數,這是主要的問題

的唯一方法,到目前爲止,我發現是與相關的指令範圍動態設置TemplateUrl是這樣

.directive('....', function() { 
    return { 
    link: function (scope, element, attrs) { 
     scope.getTemplateUrl = function() { 
     return **.... scope.Somthing ...**; 
     }; 
    }, 
    template: '<ng-include src="getTemplateUrl()"/>' 
    }; 
}); 

另一種解決方案是

.directive('....', function() { 
    return { 
    controller: function ($scope) { 
     $scope.getTemplateUrl = function() { 
     return **.... scope.Somthing ...**; 
     }; 
    }, 
    template: '<ng-include src="getTemplateUrl()"/>' 
    }; 
}); 

我的第一個問題是,這看起來像修補程序的問題

我的第二個問題是在指令中生成html字符串。

是否有任何其他方式來存檔?

+0

我會在'ng-include'中使用一個變量而不是函數調用,但是我認爲你所做的完全沒問題。如果您在指令中使用HTML時感到不舒服,您可以始終將該片段保存到文件中。這比注入'$ compile'更簡單,並且自己動態編譯模板。 – adam0101

回答

0

讓分裂您的問題2個問題:d

第一個問題是關於JS存儲模板。

這個問題可以用$ templateCache和注射

<script id="myTemplate.html" type="text/ng-template"> <div> SOME MARKUP <div> </script> 

Here你可以閱讀更多有關此

第二個問題是有關動態模板來解決。 所以有2個解決方案(據我所知:D) 你已經提到的第一個解決方案 - 使用ng-include。

第二種解決方案是使用$compile動態編譯帶有角度指令的html。

第一種解決方案稍微好一點,因爲在第二種情況下,您必須始終記住內存泄漏。在這裏尋找更多infohere

+0

感謝您的回答,這是非常豐富的。所以沒有其他的方法比我在我的quastion中有更好的方法嗎?我希望角色團隊會讓模板處理一個具有scope屬性的功能 –

+0

Angular團隊正在使用angular 2.0所以我不認爲這些新功能在Angular 1中即將推出。 如果我的答案對您有幫助,請將其標記爲答案。 TY。 – Vitalii