我有一个指令,查看配置以确定要使用的模板。过去工作得很好;我有一个Config服务,只返回一个带有配置值的对象,然后我做了类似的事情:
if (Config.Values.ReleaseVersion < 1.0) {
template = 'partials/pagebeta.html';
}
else {
template = 'partials/page.html';
}
templateUrl: template
最近引入了一个问题。我的配置服务必须从json文件中获取值。现在因为获取配置是异步的,我现在从Config服务传回一个承诺。这在我的指令中给我带来了问题 - 我不能这样做:
var template;
Config.then(function(config) {
if (config.Values.ReleaseVersion < 1.0) {
template = 'partials/pagebeta.html';
}
else {
template = 'partials/page.html';
}
});
templateUrl: template
任何建议都表示赞赏!
答案 0 :(得分:2)
如果您的templateUrl依赖于异步计算的值,则不能再使用该指令的templateUrl
属性,您将不得不使用较低级别的API,即$http
和$compile
您需要做的只是(仅在链接功能中可用)是使用$http
检索模板的内容(不要忘记涉及$templateCache
!)然后“手动”编译模板的内容
这可能听起来像是很多工作,但在实践中却相当简单。我建议您查看使用此模式的ngInclude
指令sources。