2016-05-14 79 views
13

我一直在试图用新的角度1.5 component语法项目,但我无法弄清楚如何注入依赖到的组件定义。角1.5组件依赖注入

这是我在重构现有指令到组件的尝试:

angular 
    .module('app.myModule') 
    .component('row', { 
     bindings: { 
     details: '@', 
     zip: '@' 
     }, 
     controller: 'RowController', 
     templateUrl: basePath + 'modules/row.html' // basePath needs to be injected 
    }) 

由于种种原因,我们注入恒basePath到我们所有的指令作为templateUrl的一部分。

如何做到这一点的部件上,因为组件定义不是一个功能?

回答

14

您可以使用功能templateUrl构造URL。然而,不同于一个用于指令,组分templateUrl功能是注射(参考docs),这意味着你可以注入恒定(或任何其它可注射的服务)到它。正是你所需要的:

.component('row', { 
    bindings: { 
    details: '@', 
    zip: '@' 
    }, 
    controller: 'RowController', 
    templateUrl: function(basePath, $rootScope) { // $rootScope is an example here 
    return basePath + 'modules/row.html' 
    } 
}) 

微小安全数组符号也被支持:

templateUrl: ['basePath', '$rootScope', function(basePath, $rootScope) { 
    return basePath + 'modules/row.html' 
}] 

演示:http://plnkr.co/edit/jAIqkzZGnaEVPaUjyBrJ?p=preview

+0

完美!我没有想到将templateUrl变成一个函数。 – epb