我一直在尝试使用 Angular 2 文档中的 Heroes 教程进行实验。然而,我遇到了一个错误,不理解其中的原因:
涉及到两个部分:
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');
}
}
当我试图搞清楚发生了什么时,我删除了所有与 Promise 相关的代码。然而,我仍然得到相同的错误。一切都编译良好,它是一个运行时错误。 HeroService
和 RouteParams
在父组件中提供。
两个问题:
- 如何解决这个问题?
- 如何调试此类问题?
我倾向于认为这是 Angular 2 中的一个 bug,但我不确定如何确保这不是我的错误。提前感谢您的帮助。
更新:
我已添加临时修复代码(避免注入,因此不是此问题的解决方案,因为我想让注入正常工作)。
这是一个 Plunker,其中包含我正在尝试的代码的近似版本。我无法使其正常运行,但通过查看代码可能有助于诊断问题。
HeroService
或者RouteParams
的引入。你使用的是哪个版本的Angular2?如果你使用的是rc.x版本,请参考https://dev59.com/y5bfa4cB1Zd3GeqPxK-I - Günter ZöchbauerHeroService
和RouteParams
都被导入到文件中,并在组件链中的更高级组件中注入了@GünterZöchbauer。 - Omar Trejo