2016-04-09 19 views
0

モジュールの実行ブロックの$templateCacheにテンプレートをロードしようとしています。テンプレートのURLを使用してテンプレートにJSPをロードする

angular.module('myapp').run(function($http, $templateCache, $timeout) { 
    var templateLocation = 'location/to/template.html'; 
    $http.get(templateLocation).them(function(response) { 
     $templateCache.put(templateLocation, response.data); 
    )}; 
} 

これはテンプレートをtemplateCacheに読み込みます。しかし、私が指示にそれを使用しようとすると。 $httpプロミスが解決される前にディレクティブが読み込まれるため、ロードされません。ここで

ディレクティブ

angular.module('myApp').directive('myDirective, directiveFn); 
directiveFn.$inject = ["$templateCache"] 

function directiveFn($templateCache) { 
    var templateLocation = 'location/to/template.html'; 
    return { 
     restrict: 'EA' 
     scope: { 
      thing1: "=" 
     } 
     template: $templateCache.get(templateLocation) 
    } 
} 

のコードはこれを行うには良い方法/場所はありますか?

+0

達成しようとしていることは何ですか?どうしてテンプレートの場所をtemplateUrlに入れないのか分かりません。 –

+0

@dvidsilvaは、私がカルマを使用していないので、ディレクティブをテストしているときにtemplateUrlを置くと問題を引き起こします。また、テンプレートをロードしたキャッシュにテンプレートを置くと、パフォーマンスが向上します。 –

+0

テストには何を使用していますか?また、それをダイナミックにすることができないので、テストとブラウザの動作が異なりますか? –

答えて

1

あなたの指示に$templateRequestを使用することはどうですか? ディレクティブが開始されたときにテンプレートを読み込むためにこれを使用します。これにより、ディレクティブ内でテンプレートHTMLを使用することができます。

私はTypescriptを使用しています。私の$ templateRequestはディレクティブクラスに依存しているため、このスコープに含まれています。 this.$templateRequest('client/lib/directives/aTemplate.html').then((html) => { ... do something });

クイックルックでは、templatecacheで使用することもできます。このスレッドでは、その一部について説明します。 https://github.com/angular/angular.js/issues/10630

+0

私はそれを試していませんが、約束が解決した後に 'html'で何かしかできないので、問題を解決するようには見えません。その時に指示関数は空のテンプレートを返すでしょう'$ http()。get()'を使ってテンプレートのhtmlを取得する場合 –

+1

いいえ、いいえ、ディレクティブにロードされるテンプレートはaSyncになりますが、ディレクティブがテンプレートをロードしているので、 HTML(例えば要素にそれを挿入する)は、あなたが望むことをする必要があります。いいえ? – Mattijs