MyComponent verwendet einen Dienst, um Daten abzurufen, und rendert diese Daten dann. Der Dienst kann jedoch keine Daten abrufen, bis der Benutzer angemeldet ist. Wenn der Benutzer zum ersten Mal auf die Route '/ myPage' zugreift, zeigt die Containerkomponente die Anmeldekomponente an. Obwohl die Anmeldekomponente anstelle von ng-content gerendert wird (was zu MyComponent führt), wird MyComponent von angular initialisiert und ruft den Service auf, Daten zu früh abzurufen, bevor er sich anmeldet. Deshalb, wenn sich der Benutzer erfolgreich anmeldet und MyComponent schließlich rendert, gibt es keine Daten, der ursprüngliche Datendienst ergab nichts.Wie wird die Funktion ausgeführt, wenn die Winkelkomponente gerendert wird?
Wie kann ich den Datenabruf verschieben, bis die Komponente gerendert ist? Ich habe alle verschiedenen Lebenszyklusmethoden in MyComponent ohne Erfolg ausprobiert.
app.component
<container>
<router-outlet></router-outlet>
</container>
Behälterkomponente
<div *ngIf="!userService.getLoggedInUser()">
<login></login>
</div>
<div *ngIf="userService.getLoggedInUser()">
<ng-content></ng-content>
</div>
Rangierbaugruppe
const routes: Routes = [
{ path: 'myPage', component: myComponent }
];
meine Komponente
export class MyComponent {
data
constructor(private dataService: DataService) {}
ngOnInit() {
//how can i make run this service AFTER the component renders? i know
//ngOnInit is definitely not the correct lifecycle method, but what is?
this.dataService.get().then((data) => this.data = data);
}
}
Sie suchen: https://angular.io/api/core/AfterViewInit. Genauso wie OnInit (importieren, implementieren, dann verwenden Sie ngAfterViewInit() {...}) –
Ich denke, Sie gehen auf dem falschen Weg. Denn in Ihrem Fall müssen Sie überall Ihre Bedingung zur Überprüfung hinzufügen, ob der Benutzer angemeldet ist oder nicht. Und das bedeutet, dass die Komponente geladen ist und wir alle js-Dateien finden und überprüfen können. Und vielleicht kann jemand einen XSS-Angriff machen. In eckigen haben wir den besseren Weg, Wache zu bauen. Dort können Sie ein gutes Beispiel finden: http://jasonwatmore.com/post/2016/09/29/angular-2-user-registration-and-login-example-tutorial –
@RomaSkydan danke für die Info. Aber ich bin mir nicht sicher, was das Sicherheitsproblem ist? Ja, der Client sucht nach dem angemeldeten Benutzer, aber ich habe auch eine Sicherheitsüberprüfung serverseitig mit Tokens (deshalb muss ich Daten abrufen, nachdem sich ein Benutzer angemeldet hat). Können Sie genauer erläutern, wo das Sicherheitsproblem liegt? – Simon