2

構成を調べて、使用するテンプレートを特定するディレクティブがあります。以前はうまく機能していました。構成値を含むオブジェクトを返すだけの構成サービスがあり、次のようなことを行いました。

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

最近、問題が導入されました。私の Config サービスは、json ファイルから値を取得する必要があります。構成の取得は非同期であるため、Config サービスから Promise を返します。これは私のディレクティブで問題を引き起こしています-私はこれを行うことができません:

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 に答える