2016-11-23 6 views
1

Ich kann @Input nicht verwenden, weil die beiden Komponenten im Komponentenbaum weit voneinander entfernt sind.Zugriff auf die Eigenschaften der Komponente A in Komponente B?

Die Verwendung eines Dienstes sieht wie die einzige Option aus, aber es erscheint sehr übertrieben, einen Dienst zu haben, der im Wesentlichen ein Duplikat der A-Eigenschaften aller Komponenten ist. Jedes Mal, wenn ich eine Eigenschaft in A einstelle, muss ich sie auch im Service einstellen, damit B darauf zugreifen kann. Scheint nicht sehr effizient.

Gibt es keine Möglichkeit, die Instanz von Komponente A in Komponente B zu injizieren? Beachten Sie, dass A kein Eltern/Kind von B ist.

Prost!

+1

https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

+0

@ GünterZöchbauer Ich bin bewusst Dienste, bitte lesen Sie meine Frage. – maximedupre

+0

Sie können sich an eine Eigenschaft eines Dienstes binden –

Antwort

0

Sie können auf eine Eigenschaft eines Dienstes binden

@Component({ 
    ... 
    template: <div>{{myService.someProp}}</div> 
}) 
class MyComponent { 
    constructor(private myService:MyService){} 
} 

dann zu duplizieren Sie brauchen nicht zu.

+0

Die Duplizierung tritt beim Abrufen der Eigenschaft nicht auf, sie tritt bei der Einstellung auf. Um es festzulegen, müssen Sie es in der Komponente + im Dienst festlegen. – maximedupre

+0

Ich weiß nicht, was du meinst. Warum müssen Sie es auf der Komponente festlegen. Three ist keine Eigenschaft der zu setzenden Komponente. –

+0

Oh richtig. Sie schlagen also vor, die Eigenschaft nur im Service festzulegen. Daran habe ich nicht gedacht. – maximedupre

Verwandte Themen