Я использовал учебник Heroes в Angular 2 документах для экспериментов. Однако я пришел к выводу, что не понимаю, что происходит с этой ошибкой:
Uncaught (in promise): TypeError: Cannot read property 'query' of null
в browser_adapter.ts:88
.
Две части включают HeroDetailComponent
и 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);
}
}
Когда я использую этот код, он работает. Но когда я переключаю конструкторы и использую одно с вставкой HeroService
, то я получаю ошибку, о которой я упоминал ранее.
@Injectable()
export class HeroService {
getHeroes() {
return HEROES;
}
getHero(id: number) {
return new Hero(1, 'Name', 'Power', 'AlterEgo');
}
}
Пока я пытался выяснить, что происходит, я удалил весь код, связанный с обещаниями. Тем не менее, я по-прежнему получаю ту же ошибку. Все компилируется отлично, это ошибка времени выполнения. HeroService
и RouteParams
предоставляются в родительском компоненте.
Два вопроса:
- Как решить эту проблему?
- Как отлаживать такие проблемы?
Я склонен думать, что это ошибка в Angular 2, но я не уверен, как убедиться, что это не ошибка с моей стороны. Спасибо заранее.
ОБНОВЛЕНИЕ:
-
Я добавил код временного исправления (который позволяет избежать инъекций и, следовательно, не является решением этого вопроса, поскольку я хотел бы, чтобы инъекция работала должным образом).
-
Это Plunker с приблизительной версией кода, который я пытаюсь. Я не мог заставить его работать правильно, но может быть полезно диагностировать проблему, просмотрев код.