Sto usando il tutorial Heroes nei documenti Angular 2 per sperimentare. Tuttavia, sono arrivato a un punto che non capisco cosa sta succedendo con questo errore:Come risolvere Angular 2 `Uncaught (promesso): TypeError: Impossibile leggere la proprietà 'query' di null`?
Uncaught (in promise): TypeError: Cannot read property 'query' of null
in browser_adapter.ts:88
.
I due pezzi coinvolti sono lo HeroDetailComponent
e lo HeroService
.
import { Component, OnInit } from '@angular/core';
import { RouteParams } from '@angular/router-deprecated';
import { Hero, HeroService } from '../index';
@Component({
selector: 'my-hero-detail',
templateUrl: ...
styleUrls: [...]
})
export class HeroDetailComponent implements OnInit {
hero: Hero;
// TEMPORARY FIX:
_heroService = new HeroService(); // Avoids injection
// constructor(private _heroService: HeroService,
// private _routeParams: RouteParams) {}
constructor(private _routeParams: RouteParams) {}
ngOnInit() {
let id = +this._routeParams.get('id');
console.log(id);
}
}
Quando uso questo codice, funziona. Ma quando cambio i costruttori, e uso quello con l'iniezione HeroService
, ricevo l'errore che ho menzionato prima.
@Injectable()
export class HeroService {
getHeroes() {
return HEROES;
}
getHero(id: number) {
return new Hero(1, 'Name', 'Power', 'AlterEgo');
}
}
Mentre cercavo di capire cosa sta succedendo ho rimosso tutto il codice relativo alla promessa. Tuttavia, ho ancora lo stesso errore. Tutto sta compilando bene, è un errore di runtime. Il HeroService
e RouteParams
sono forniti in un componente padre.
due domande:
- come risolvere questo problema?
- Come eseguire il debug di questo tipo di problemi?
Sono propenso a pensare che sia un bug in Angular 2, ma non sono sicuro di come sia sicuro che non sia un errore da parte mia. Grazie in anticipo.
AGGIORNAMENTI:
ho aggiunto il codice della soluzione temporanea (che evita l'iniezione e, quindi, non è una soluzione a questo problema, come mi piacerebbe avere l'iniezione funziona correttamente).
This is a Plunker con una versione approssimativa del codice che sto provando. Non riuscivo a farlo funzionare correttamente, ma potrebbe essere utile diagnosticare il problema esaminando il codice.
Lei non sembra essere fornire il '' HeroService''. Viene fornito in un componente principale? –
Sì, è fornito in un componente principale. Grazie. Lo aggiungerò alla descrizione della domanda. –
Ah, forse un plunkr che riproduce questo è in ordine. –