2017-01-04 6 views
1

私は、対話が必要な親コンポーネントと子コンポーネントを持っています。通常はcontextual componentsを使用します。この場合、2つのコンポーネントが同じルートテンプレートにないため、これは機能しません。親コンポーネントは1つのルート上にあり、子コンポーネントは子ルート上にあり、私が知る限り、コンテキストコンポーネントを{{outlet}}に渡すことはできません。同じように、コントローラ ember.js - 2つのコンポーネントを別々のルートに接続するにはどうすればよいですか?

  • 使用
  • が、私は両方のオプションを避けたいサービスに

    1. 移動親コンポーネントロジック:

      Route  | Component 
      ---------------------------- 
      route  | parentComponent 
      route.sub | childComponent 
      

      私は現在、2つのオプションを参照してください親子コンポーネントが同時に2回表示されることがあります。どちらの場合も、私は、正しい親を正しい子と接続するために何らかのIDを使用するという別のオプションは見当たりません。私はそれをデバッグして読みにくいので、好きではありません。

       Controller/Service 
           ∧    | 
           |    ∨ 
           action()  ? or ? -> use of ID 
           ∧   |  | 
           |   ∨  ∨ 
      child child  parent parent 
      

      他の方法がありますか? 助けてくれてありがとう!

    答えて

    4

    あなたが入力した2つのオプションを使用せずに解決策を実装することはできません。

    親が1つのルートに存在し、子が別のルートに住んでいるため、上記のコンポーネントが適切な親子関係を示していないと思います。

    TemplateA - が{{comp-a}}{{comp-b}}の場合 - これは兄弟構成要素と呼ばれます。ここではcomp-bcomp-aと通信できませんが、共通のコントローラ/ルートにアクションを送信することで可能です。

    と仮定TemplateAは - {{comp-a }}を有しcomp-a内部{{comp-b}}を有している - これは親コンポーネントcomp-aに通信することができ、ここで親子成分、子コンポーネント(comp-b)と呼ばれます。

    コンポーネントはバブル処理で通信し、アクションロジックはデータのソース/所有者に実装する必要があります。あなたのケースでは

    は、答えが、私は、サービスへのデータの所有権を与えることを好む

    1.Ifコンポーネントが同じネストされたルート階層で使用されていない、データの所有者が誰であるかに依存しています。
    2.両方のコンポーネントが同じネストされたルート階層で使用されている場合は、コントローラー/ルートにデータ所有権を与えることをお勧めします。
    parent-route - >が親コンポーネントにデータをロードして必要なデータを渡します。
    parent-route - >親ルートから子コンポーネントの必須データを取得します(modelForcontrollerForメソッドを使用できます)。子コンポーネントを渡します。ここで、子コンポーネントは、ここから通信するアプリケーションルートまでアクションをトリガーできます。

    +0

    詳細なフィードバックをいただきありがとうございます。 –

    +0

    私はそれを疑った。私の場合、親と子のコンポーネントは同じデータでは動作しません。彼らは物を見せたり飾ったりする目的でのみコミュニケーションをとる必要があります。私はコントローラ/ルートオプションに行くと思います。 Query Parametersで可能な限り移動します。 –

    関連する問題