3

我的指令需要一個常量(MODULE_ROOT_URL)來生成模板路徑。通過指令語法,我可以將常量注入到目錄工廠函數中。 如何將此指令轉換爲Angular 1.5組件? 是否有可能將服務注入到Angular 1.5組件中?是否有可能將服務注入到Angular 1.5組件的templateUrl屬性中?

謝謝。

更新: 我知道該服務可以注入組件控制器。 但是,我怎樣才能注入一個組件的templateUrl屬性的服務?

Update2: 請參閱plnkr。我創建了指令和組件版本。 指令版本正常工作。但是組件的版本有錯誤[ngTransclude:孤兒]

https://plnkr.co/edit/DMumuIpXJY6RDCX6XObz?p=preview

angular.module('AbcModule') 
     .directive('abcDirective', ['MODULE_ROOT_URL', function (MODULE_ROOT_URL) { 
      return { 
       restrict: 'E', 
       templateUrl: MODULE_ROOT_URL + 'abc/abc.tpl.html' 
      } 

     }]); 
+1

的可能的複製[angularjs 1.5組分依賴注入(http://stackoverflow.com/questions/34891397/angularjs-1-5-component-dependency-injection) – medievalgeek

回答

10

templateUrltemplate可以是函數和依賴可注射。

angular.module('AbcModule') 
.component('abcDirective', { 
    restrict: 'E', 
    templateUrl: function(MODULE_ROOT_URL) { 
      return MODULE_ROOT_URL + 'abc/abc.tpl.html'; 
    } 
}); 
+0

@PankajParkar對於'.directive'來說是這樣,但對'.component'不是。隨意閱讀文檔並嘗試一下。 – zeroflagL

+0

道歉,你真棒。 +1,我會刪除我的答案,一旦OP接受這個答案..只是我在我的答案中添加了評論,以通知您的答案是正確的。 :-) –

+0

太棒了,謝謝 – thermostat

1

直到角1.4,directive DDO已經通過函數返回,你可以在一個地方的依賴。但是在Angular 1.5.3中,我們可以通過控件在組件的controller中添加依賴項。您可以像下面那樣使用ng-include &注入控制器內部的依賴關係。

標記

angular.module('AbcModule') 
.component('abcDirective', { 
    template: '<div ng-include="$ctrl.rootUrl ? $ctrl.rootUrl + \'abc/abc.tpl.html\': \'\'"></div>', 
    controller: function(MODULE_ROOT_URL) { //<--injected dependency here. 
    var self = this; 
    self.rootUrl = MODULE_ROOT_URL; 
    } 
}]); 
+0

感謝。但它不適用於ng-transclude。如果模板包含ng-transclude,則設置transclude:true,則用戶的內容不會被加載到組件中。 – thermostat

+0

@thermostat你能爲我提供plunkr/fiddle嗎? –

+0

謝謝。請參閱plnkr。我創建了指令和組件版本。 指令版本正常工作。但組件版本有錯誤[ngTransclude:orphan] https://plnkr.co/edit/DMumuIpXJY6RDCX6XObz?p=preview – thermostat

相關問題