在AngularJS指令中使用异步配置

时间:2013-01-24 15:28:26

标签: asynchronous angularjs

我有一个指令,查看配置以确定要使用的模板。过去工作得很好;我有一个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

任何建议都表示赞赏!

1 个答案:

答案 0 :(得分:2)

如果您的templateUrl依赖于异步计算的值,则不能再使用该指令的templateUrl属性,您将不得不使用较低级别的API,即$http$compile

您需要做的只是(仅在链接功能中可用)是使用$http检索模板的内容(不要忘记涉及$templateCache!)然后“手动”编译模板的内容

这可能听起来像是很多工作,但在实践中却相当简单。我建议您查看使用此模式的ngInclude指令sources