我有一个场景,我只想在满足某些条件时(基于我们从REST调用获得的数据)呈现模板。所以,我做了以下几点:
我的代码(通过将工厂注入模板功能):
.state('dashboard.deal.xyz', {
url: "/xyz/:dealId",
resolve: {
permissions: function(dealUnit, $state) {
console.log('Inside the resolve of permissions :::', $state.params.dealId);
return dealUnit.getUnitPermissions('123412341234DealId');
}
},
views: {
"viewA": {
template: function(dealUnit) {
//Here I want to inject either 'permissions' (the resolve object)
//or the 'dealUnit' factory which gets me the permissions from the server directly.
return '<h1>return the template after getting the permissions resolve object</h1>';
}
},
"viewB": {
template: "viewB"
}
}
})
我的'dealUnit'工厂工作正常,当我在状态的'resolve'中使用它时返回一个对象。但是,当我在嵌套视图的模板函数中注入它时,不会注入该工厂。
我做得对吗?如果没有,那么我该怎么做呢?
答案 0 :(得分:1)
如果我们想做一些&#34;魔术&#34;在返回模板之前......我们应该使用 templateProvider
。检查此Q&amp;答:
Trying to Dynamically set a templateUrl in controller based on constant
因为 template:...
可以是字符串或函数(请查看文档:)
模板
html模板作为字符串或函数返回html模板作为字符串,应由uiView指令使用。此属性优先于templateUrl。
如果template是一个函数,它将使用以下参数调用:
{array。} - 通过应用当前状态
从当前$ location.path()中提取的状态参数
template: function(params) {
return "<h1>generated template</h1>"; }
使用templateProvider,我们可以获得任何注入的内容,例如角度 $templateRequest
的巨大改进。 Check this answer及其掠夺者
templateProvider: function(CONFIG, $templateRequest) {
console.log('in templateUrl ' + CONFIG.codeCampType);
var templateName = 'index5templateB.html';
if (CONFIG.codeCampType === "svcc") {
templateName = 'index5templateA.html';
}
return $templateRequest(templateName);
},