2016-10-21 1 views
2

Gibt es eine Möglichkeit, eine TemplateRef für eine bestehende HTML-Vorlage in einem Service zu bekommen?Angular2 - ein TemplateRef innerhalb eines Service erhalten

Kontext der Frage (da ich etwas falsch an erster Stelle tun kann):

ich einen Service, die NgbModal verwendet einen Text in einem Popup angezeigt werden soll. Das Modal erfordert einen TemplateRef, um den Inhalt anzuzeigen, den ich nicht genau zu erstellen weiß. Die anderen Optionen bestehen darin, einen String zu übergeben (der maskiert ist und ich HTML anzeigen muss) oder eine Komponente zu übergeben (von der ich nicht weiß, wie sie den gewünschten Text weitergibt).

Antwort

2

Zwei Möglichkeiten

  • <template> aus der Vorlage Komponenten:
  • <template> als Kind weitergegeben von außen

(nicht getestet)

@Component({ 
    selector: 'foo', 
    template: '<template #ref1>xxx</template>' 
}) 
class MyComponent { 
    @ViewChild('ref1') template1:TemplateRef; 

    constructor(private template2:TemplateRef, private someService:SomeService) { 
    someService.template2 = template2; 
    } 

    ngAfterViewInit() { 
    this.someService.template1 = this.template1; 
    } 
} 
<foo><template>yyy</template> 
+0

Wird versuchen, aber es macht eine Art zirkuläre Abhängigkeit: Die Komponente benötigt den Dienst, aber der Dienst benötigt die Komponente, um die Vorlage zu injizieren, andernfalls wird es nicht richtig eingerichtet. Könnte es einen Weg geben, das zu vermeiden? – krojew

+0

Ich glaube nicht. Ich bin mir ziemlich sicher, dass Sie eine Komponente benötigen, um eine Referenz zu erhalten. Ich würde mir hier keine Sorgen machen. Es ist nur bidirektional. Der Dienst muss warten, bis die Komponente die Referenz übergeben hat, ansonsten sehe ich hier kein Problem. –

+1

Ich sehe, das ist der richtige Weg. Werde es versuchen, danke. – krojew