2017-07-03 2 views
0

Ich habe einen Dienst, der einige Daten asynchron erhält. Es verursacht die Komponente zu rendern oder so denke ich. Es gibt nur eine console.log in der Auflösung des Versprechens. Warum verursacht dies das Rendern?Komponentenaktualisierung/render wird ausgelöst

constructor(private viewService: viewService) { 
    console.log('[MyView component] construction started'); 

    viewService.getData(1).then(function(result) { 
     console.log('[MyView component] got data from service!'); 
    }); 

    console.log('[MyView component] construction complete!'); 
} 

Fehler:

ERROR TypeError: Cannot read property 'myViewProperty' of undefined 
    at Object.eval [as updateDirectives] (MyViewComponent.html:23) 
    at Object.debugUpdateDirectives [as updateDirectives] (core.es5.js:12806) 
    at checkAndUpdateView (core.es5.js:12144) 
    at callViewAction (core.es5.js:12507) 
    at execComponentViewsAction (core.es5.js:12439) 
    at checkAndUpdateView (core.es5.js:12150) 
    at callViewAction (core.es5.js:12507) 
    at execEmbeddedViewsAction (core.es5.js:12465) 
    at checkAndUpdateView (core.es5.js:12145) 
    at callViewAction (core.es5.js:12507) 
+0

Ich bin mir ziemlich sicher, dass das nicht genug Informationen sind. Wo verwenden Sie 'myViewProperty', die den Fehler verursacht? –

+0

Die Sache ist, es ist nichts in der. Dann sehe ich nicht, wie es dazu führen könnte, dass die Komponente zu aktualisieren. Ich aktualisiere die Frage mit der Variablen –

+0

Die Vervollständigung eines 'Versprechens' oder Ereignisses eines 'Observablen' bewirkt, dass die Änderungserkennung ausgeführt wird, was ein erneutes Rendern verursacht. Ich schätze, Sie bekommen den Fehler schon bevor die Antwort eintrifft. –

Antwort

0

Eine Vermutung Sie myViewProperty von der Promise/Observable der Fertigstellung gesetzt ... Versuchen On Init zu implementieren und tut so:

import { OnInit } from '@angular/core'; 
export class EventSelectionSearchComponent implements OnInit, OnDestroy { 


    constructor(private viewService: viewService) { 
    } 

    ngOnInit(): void { 
     this.viewService.getData(1) 
     .then(data => { 
      this.myViewProperty = data; 
     }); 
    } 

    [ ... ] 

} 

Die Komponente Eingaben, Ausgaben oder Argumente sind möglicherweise nach dem Aufruf des Konstruktors nicht verfügbar. Auf der anderen Seite, ngOnInit ein Lebenszyklus-Haken von Angular2 genannt, um anzuzeigen, dass Angular ist die Schaffung der Komponente getan.

Verwandte Themen