2017-09-20 8 views
2

私たちはNG2/4のものを扱います。私たちは、サマリー画面をユーザが戻るボタンをクリックしたときに同じ状態に保つ(レクリエーションからの保護を避ける)ように、サマリ画面を詳細画面から全画面にナビゲートするカスタム再利用戦略を実装しました。角度2/4。再利用戦略。コンポーネントに再利用されたことを通知する方法

子画面でレコードを編集して元の画面に戻すと、すべてのマスター画面ではなく、特定のデータを再読み込みする必要があります。私たちは何らかの形で、関連するデータが変更されたため、更新する必要があるコンポーネントにインフォメーションする必要があります。

しかし、戦略クラスでは、コンポーネントへのアクセスを持つメソッドはありません。クラスですがインスタンスはないので、コンポーネントに特定の変更を知らせる方法が不明です。

public shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean { 
    // I guess here we have to treat it somehow if it is possible 
} 
+0

ngDoCheckコールバックが呼び出されていると、あなたのフラグがtrue、falseにフラグを設定し、データをリロードした場合は? (子と親) –

+0

論理的には親と子としてリンクしていますが、ルーティングは賢明ではありません。彼らは異なる道を持っています。 – Damask

答えて

0

ディテールコンポーネントから親コンポーネントのプロパティにアクセスできる場合は、角度変化の検出に問題がある可能性があります。詳細はhttps://github.com/primefaces/primeng/issues/2606です。 詳細コンポーネントから親コンポーネントのプロパティにアクセスできなかった場合は、共有サービスを使用してみてください。それが助けてくれることを願っています。

0

同じ問題がありました:私たちのアプリケーションには、再利用されているコンポーネントがたくさんあります。幸運なことに、それらのすべてが1つの抽象クラスから継承されるため、このソリューションは1つの場所でのみ実装されました。

回避策はかなり醜いですが、必要性をカバーし、非常に小さく簡単です。

  1. ルーターをコンポーネントに注入します。
  2. ルータイベントを登録します。コンポーネントがルータイベントをキャプチャしている場合は、コンポーネントが残っている可能性があり、ユーザーが戻った後にデータを更新する必要がある可能性があります。ルータのイベントが発生した場合は、コンポーネントにフラグを設定してください。
  3. ユーザが復帰したときに必要なのは、これだけです。デフォルトフックngDoCheckを無効にすることによってそれを追跡します。
  4. 私は右のそれを理解していれば、あなたの問題は、コンポーネント間の通信である
constructor(router: Router) { 
    super(); 

    router.events.subscribe(e => { 
    if (!this._reloadData) { 
     this._reloadData = true; 
    } 
    }); 
} 

private ngDoCheck() { 
    if (this._reloadData) { 
    this._reloadData = false; 
    this.resetData(); 
    } 
} 
関連する問題