2016-05-17 6 views
4

Hier ist eine Sache, die ich gewohnt bin mit Winkel Richtlinien zu tunDependency Injection in Winkelkomponenten wie Richtlinien

angular.module('app.directives').directive('login', ['$templateCache', function ($templateCache) { 
    return { 
     restrict: 'E', 
     template: $templateCache.get('directives/login/login.html'), 
     controller: 'LoginController as vm', 
     scope: true 
    }; 
}]); 

Ich habe sehr ans Herz gewachsen zu verwenden Template Cache HTML-Inhalt in Vorlage meiner Anweisung zu injizieren. Jetzt mit Angular 1.5 gibt es diese neue Sache, die alle coolen Kinder verwenden, genannt Komponente(), die ich einen Blick gebe, um zu sehen, wenn es wirklich gut ist und ich an diesem sehr beginnenden Teil feststecke: wie man Sachen in den injiziert Komponente selbst (nicht in der Steuerung)?

In diesem Fall können Sie sehen, dass ich in die Anmeldung Direktive die $ templateCache-Abhängigkeit injiziere. Wie würde ich diese Direktive als Komponente umschreiben? (Denken Sie daran, mein Wunsch, $ templateCache über templateUrl zu verwenden)

Antwort

5

Nun, in Angular 1.5 Komponenten, template Eigenschaft kann eine Funktion sein und diese Funktion ist injizierbar (documentation).

So können Sie nur so etwas wie verwenden:

... 
template: ['$templateCache', function ($templateCache) { 
    return $templateCache.get('directives/login/login.html') 
}] 
... 

Ein paar Links von Google-Suche: one und two.

Ich hoffe, es wird helfen.

3

Die Antwort von MaKCblMKo ist richtig, aber denken Sie daran, dass AngularJS zuerst den templateCache überprüfen wird, bevor Sie die Vorlage abrufen. Daher müssen Sie diesen Aufruf nicht in Ihrer Anweisung oder Komponente ausführen.

angular.module('myApp', []) 
.component('myComponent',{ 
    templateUrl: 'yourGulpPattern' 
}) 
.run(function($templateCache) { 
    $templateCache.put('yourGulpPattern', 'This is the content of the template'); 
}); 

https://jsfiddle.net/osbnoebe/6/

+0

Es geht nicht um Inhalte dort setzen, habe ich einen Schluck Aufgabe, die minifies und 'put' jede HTML-Datei in Template Cache. Ich musste nur auf das Element zugreifen, damit ich den Inhalt abrufen konnte. –

+0

Das ist cool, aber was ich versuche zu sagen ist, dass, wenn Ihre Schluckaufgabe ein 'Put' macht, Sie immer noch nicht den $ templateCache berühren müssen. Verweise einfach auf die URL und sie wird sie aus dem Cache holen, da sie schon da ist. Mein Put-Beispiel zeigte nur, dass es bereits im Cache ist. Mit anderen Worten - stellen Sie sich vor, dass die Funktion run in meinem Beispiel Ihre Schluckaufgabe ist ... es sei denn, ich verstehe immer noch nicht, was Sie sagen. – Zach

+0

Verweisen Sie einfach auf die VorlageUrl und lassen Sie sie aus dem $ templateCache ziehen. Ich hoffe, das ist klarer. Ich habe nicht versucht, dir zu zeigen, wie man es in den Cache legt. – Zach