2016-12-03 5 views
1

リンクがクリックされたときに別のプロジェクトをフィルタするようにアプリが設定されています。これは、ルートパラメータを取り込み、それを自分のコンポーネントに渡すことによって行われます。私のコンポーネントは、提供された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' } 
]; 

答えて

2

ngOnInitが呼び出されていない理由の問題があります。あなたのルートはどちらも同じコンポーネント(HomeComponent)をロードしていますが、Angularはそれが以前のものを破壊する理由を見ていますが、そのコンポーネントのパラメータを変更するだけでCPUの負荷が軽減されますこの場合、コンポーネントの入力)。したがって、コンポーネントの入力が変更されたときに呼び出されるこのライフサイクルフック「ngOnChanges」があります。あなたはこのサービスに耳を傾け、this.getProjects()を呼び出すよりも、そのサービスの内部の状態を変更していると仮定しているので、

しかし、あなたの問題は少し異なると思います。 this.getProjects()this.activatedRoute.params.subscribeハンドラの内側で呼び出される必要があります。なぜなら、サブスクリプションがその非同期のために後で来るため、pageCategoryがまだ呼び出されていないときにonCurrentを呼び出すonInitフックを除いて、誰もまだthis.getProjectsを呼び出していないからです。 this.getProjectsを呼び出すには、サブスクリプションハンドラが必要です。

私はあなたのためにいくつかのことを助け、明確にしました

+0

ありがとう!私はあなたが言ったことを取ってそれを理解することができました。私はまだOnInitからすべてを呼び出しています。 OhChangesは質問リクエストを殺して何も返さないようです。 – Jleibham

+0

どうしたのですか? – chrismarx

関連する問題