2017-12-28 31 views
1

は、だから私は親がサーバーへのコールを作成している 角度4は

<parent> 
    <router-outlet></router-outlet> 
</parent> 

はちょうど人間の体にそれを呼び出すことができます大規模なJSONオブジェクトを取得作られて、それの中にネストされたルータと親コンポーネントを持つactivateChildすることができます。ユーザーが親コンポーネント内のリンクをクリックすると、子コンポーネントのコンポーネント(脚コンポーネント...)がナビゲートされます(つまり、操作のためにボディデータのコンポーネントを分解しようとしています)。両親と子どもは双方向サービスを通じてコミュニケーションしています。

ブラウザのURLタブの parent/bodycomponentにアクセスできないようにURLを保護するにはどうすればいいですか?アプリケーションのフローに従うことによってのみ子コンポーネントにアクセスできます。私は子供を活性化することができます見てきましたが、それはサービスのためだけであるようです。 parent.component.tsにcanActivateChild条件を設定できますか?

+1

なぜそれをしたいですか? URLとルータのすべてのポイントは、URLを使用してナビゲートすることができます。 URLが常に親コンポーネントを指しているようにするには、ルータコンセントを使用しないでください。 –

+0

親コンポーネントが開始されると、サーバーからのデータが取得されます。その後、ユーザーのやりとりに基づいてその子どもの間で配布されます。私は、ユーザーが親からのデータを持たずに子供に行くことを望んでいません。 –

+1

これはコードの設計上の問題です。子どもの視点では、データが利用可能になるまで何も表示しないでください。または、データが利用可能なときにのみ子をアクティブにする解決策を使用します。しかし、ユーザーは、以前に表示されたページに更新して戻ることができます。 –

答えて

0

あなたの親と子供のコンポーネントすべてが共有サービスのデータに依存するので、あなたはデータに関係なく、次へのあなたのサービスを変更することで、最初に訪問されたルートの存在であることを確認することができます

import { HttpClient } from "app/http-client"; 
import { Injectable } from "@angular/core"; 
import { Observable } from "rxjs/Rx"; 

@Injectable() 
export class ParentService { 
    data: any; 


    constructor(private http: HttpClient) { 
     this.getData() 
      .subscribe(data => this.data = data); 
    } 

    getData() { 
     return this.http.get(`url`) 
         .map(res => res.json()); 
    } 


} 

と、いつでもこのサービスを挿入するコンポーネントは、アプリの起動時にも、それ以降でも、データがロードされます。