angular - 'This' er udefinert inne i subscribe
Jeg har en subscribe-setning og prøver å feilsøke dette, men når jeg går gjennom i VS Code er 'this' alltid udefinert inne i setningen. I denne situasjonen er 'this.dataLoaded' udefinert. Hvordan kan jeg få det til å ikke være udefinert når jeg feilsøker?
this.router.events
.filter(event => (event instanceof NavigationEnd))
.subscribe((routeData: any) => {
if(!this.dataLoaded){
...
}
});
Svar #1
Som en som var nær ved å implementere that=this-løsningen fra det aksepterte svaret, spar deg selv og se på svaret Tomas skrev. Det er verdt å bruke litt ekstra tid på, og å unngå å bruke JavaScript-triks hvis mulig.
For et eksempel på bruk av pilfunksjoner for å beholde din this-kontekst, se nedenfor.
Dette er koden jeg opprinnelig hadde som mistet this-konteksten:
this.settingsService.getClientSettingsByCategory(clientId, categoryId)
.subscribe(
this.loadJobStatusReport
);
Og dette er den oppdaterte koden som beholder den forventede this-konteksten:
this.settingsService.getClientSettingsByCategory(clientId, categoryId)
.subscribe(
settings => this.loadJobStatusReport(settings)
);
Svar #2
Når du bruker .subscribe(), kan det i Angular hende at det ikke får this. I mitt tilfelle brukte jeg en annen kopi av dette. Det fungerer alltid for meg. Det kan også fungere for deg.
var that = this; // Hear I store the this ref into another that
this.router.events
.filter(event => (event instanceof NavigationEnd))
.subscribe((routeData: any) => {
if(!that.dataLoaded){ // Hear you can use that instead of this
...
}
});
