2017-06-12 2 views
0

einen Wert zu. Ich versuche, eine beobachtbare Quelle zu abonnieren, um den Wert der Quelle an eine Komponentenvariable (event: Event) zu binden.Weisen Sie einer Komponentenvariablen innerhalb von subscribe()

Obwohl die Beobachterfunktion, die an die subscribe()-Funktion übergeben wurde, korrekt ausgeführt wird und das Observable bei expected ankommt, ist die Komponentenvariable event: Event immer undefiniert.

Warum passiert das und wie kann ich dieses Problem lösen?

@Component({ 
    selector: 'event-detail', 
    template: ` 
     <div *ngIf="event"> <-- this will never evaluate to 'true' 
      ... 
     </div> 
    `, 
}) 
export class EventCenterDetailComponent implements OnInit { 
    event: Event; 
    subscription: Subscription; 

    constructor(
     private eventBus: EventBus 
    ) {} 

    ngOnInit() { 
     this.subscription = this.eventBus.event$.subscribe((event: Event) => { 
      this.event = event; <-- this assignment seems to have no effect on the component variable 
     }); 
     console.log(this.event); <-- this is 'undefined' 
    } 
+1

Sie beheben sagen, dass, wenn Sie einen 'console.log platzieren (" etwas '); '' this.event = event', wird' 'something'' an die Konsole wie erwartet gedruckt? Auch, 'console.log (this.event); <- das ist 'undefiniert' 'scheint zu diesem Zeitpunkt natürlich 'undefiniert' zu sein, da die Subscriber Function gerade eingerichtet wurde, also höchstwahrscheinlich noch nicht ausgeführt wurde (dies wird nicht die Tatsache beeinflussen, dass 'ngIf' werden sollte) wahr, wenn die Funktion ausgeführt wird). – acdcjunior

+0

zu dem gerade erwähnten @acdcjunior hinzufügen - versuchen Sie

{{ event }}
zu Ihrer Vorlage hinzuzufügen und sehen Sie, ob sich der tatsächliche Wert von false in true ändert. – Tamas

Antwort

0

Nur Erklärung hier ist, dass event in der Zeichnung nicht nach unten richtig kommt. Sie werden sehen, dass event nicht definiert ist, wenn Sie versuchen, es in der Zeichnung zu drucken Block

...subscribe((event: Event) => { 
    console.log(event); // this will print undefined most likely 
}); 

Dann müssen Sie Ihre EventBus Service

Verwandte Themen