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
                  ...
                }
            }); 

Relaterte artikler