2016-04-09 26 views
0

Aşağıdaki şekilde, modülün çalışma bloğundaki bir şablonu $templateCache içine yüklemeye çalışıyorum.Angular js, şablon url'yi kullanarak templateCache içine şablon yükleme

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); 
    )}; 
} 

Bu, şablonu templateCache'ye yükler. Ancak, onu bir direktifte kullanmaya çalıştığımda. Yönerge, $http sözünün yanıtlanmasından önce yüklendiği için yüklenmiyor. İşte

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) 
    } 
} 

bunu yapmak için daha iyi bir yolu/yer var mı yönergesi kodudur?

+0

Neyi başarmaya çalışıyorsunuz? Şablon şablonunu neden templateUrl'ye yerleştirmediğinizden emin değilim? –

+0

@dvidsilva koyarak templateUrl, yönergeyi test ederken sorun yaratıyor çünkü karma kullanmıyorum. Ayrıca, şablon yüklü önbellekteki şablonlara sahip olmak, performans için daha iyidir. –

+0

Test için neler kullanıyorsunuz? Ayrıca, dinamik yapamazsınız, bu yüzden tarayıcınızdaki testlerinizde farklı çalışır? –

cevap

1

Yönergenizde $templateRequest'u kullanmaya ne dersiniz? Yönergeler başlatıldığında bir şablon yüklemek için bunu kullanıyorum ve bu, yönergeler içindeki HTML şablonlarını kullanmama izin veriyor.

Typescript kullanıyorum ve $ templateRequest direktif sınıfımın bağımlılığı, bu yüzden bu kapsamda. this.$templateRequest('client/lib/directives/aTemplate.html').then((html) => { ... do something });

Hızlı bir bakış bana templatecache ile de kullanabileceğinizi gösterir. Bu iş parçacığı bazılarını tartışır: https://github.com/angular/angular.js/issues/10630

+0

Denemedim ama bu sorunu çözecek gibi görünmüyor, çünkü söz verdikten sonra 'html' ile yalnızca bir şey yapabilirim ve o zaman yönerge fonksiyonu ile durumdaki gibi boş bir şablon verecekti. "$ http(). get()' –

+1

yi kullanarak şablon html'yi alma evet ve hayır, yönergede yükleme yönergesi aSync, evet, ancak yönergenin şablonu yüklediği için, ben ve çözme işlemi HTML (örneğin öğesinde enjekte) istediğinizi yapmalıdır. Yok hayır? – Mattijs