2

我有一个指令,它查看配置以确定要使用的模板。它曾经很好用;我有一个配置服务,它只返回一个带有配置值的对象,然后我做了这样的事情:

if (Config.Values.ReleaseVersion < 1.0) {
  template = 'partials/pagebeta.html';
}
else {
  template = 'partials/page.html';
}
templateUrl: template

最近引入了一个问题。我的配置服务必须从 json 文件中获取值。现在因为获取配置是异步的,我现在从配置服务传回一个承诺。这在我的指令中给我带来了问题 - 我不能这样做:

var template;
Config.then(function(config) {
  if (config.Values.ReleaseVersion < 1.0) {
    template = 'partials/pagebeta.html';
  } 
  else {
    template = 'partials/page.html';
  }
});
templateUrl: template

任何建议表示赞赏!

4

1 回答 1

2

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

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

听起来可能需要做很多工作,但实际上它相当简单。我建议查看使用此模式的ngInclude指令源。

于 2013-01-24T19:05:54.307 回答