リンクがクリックされたときに別のプロジェクトをフィルタするようにアプリが設定されています。これは、ルートパラメータを取り込み、それを自分のコンポーネントに渡すことによって行われます。私のコンポーネントは、提供されたparamに基づいてdbクエリOnInitをフィルタリングします。これはすべて問題なく動作しますが、私が実行している問題は、子ルート間を移動するときにngOnInitが起動されないことです。ngOnInit子ルート間で1つの変更を発生させない
ngDoCheckは、私が使用する必要があるようですが、これは、アプリケーションがロードされているときに発生しており、projectServiceが完了していないためにコードが壊れています。プロジェクトが読み込まれる前にngDoCheckを待機させてリスンを開始させる方法がありますか? Angularのウェブサイトは、これはすでにこれを行うべきだと述べていますが、私が見ているものからはそうではありません。
これを正しく実装する方法についてのアドバイスはありますか?角度は、コンポーネントを再初期化についてスマートであるため、
コンポーネント
ngOnInit() {
this.paramsSub = this.activatedRoute.params.subscribe(params => this.pageCategory = params['id']);
this.getProjects();
}
getProjects() {
if (this.pageCategory) {
this.projectService.getProjects()
.subscribe(
projects => this.projects = projects.filter(project => project.category.includes(this.pageCategory)),
error => this.errorMessage = <any>error);
} else {
this.projectService.getProjects()
.subscribe(
projects => this.projects = projects,
error => this.errorMessage = <any>error);
}
}
ルート
const routes: Routes = [
{ path: '',
children: [{
path: ':id',
component: HomeComponent,
}]
},
{ path: '', component: HomeComponent },
{ path: '**', redirectTo: '', pathMatch: 'full' }
];
ありがとう!私はあなたが言ったことを取ってそれを理解することができました。私はまだOnInitからすべてを呼び出しています。 OhChangesは質問リクエストを殺して何も返さないようです。 – Jleibham
どうしたのですか? – chrismarx