2017-09-05 7 views
1

私は親スコープのディレクティブを持っていますが、子スコープのディレクティブもあります。テンプレートには、いくつかの親子スコープがあります。このような。複数の親子スコープイベントトリガの問題

ParentScope1 
- ChildScope1 
ParentScope2 
- ChildScope2 

私がParentの値を変更すると、それをChildにブロードキャストします。私は$rootScope.$broadcastを使って親からブロードキャストしています。私は$rootScope.$onを使って子供のこの変更を受け入れています。

私の問題は、次のとおりです。

さて、私はParentScope1の値を変更した場合、それはChildScope1にブロードキャストします。次に、ParentScope2の値を変更し、ChildScope2にブロードキャストしますが、ChildScope1にもブロードキャストします。

私が望む:ParentScope1の値を変更すると、ChildScope1にブロードキャストされます。 ParentScope2の値を変更すると、ChildScope2にブロードキャストされます。私はしばらくの間オンラインで検索しましたが、解決策が見つかりませんでした。たぶん私はそれを検索するための正しいキーワードを使用していませんでした。お知らせ下さい。ありがとうございました。

ディレクティブのあなたの定義では
+1

なぜ '$ scope'ではなく' $ rootScope'を使うのですか? [この記事をチェックしてください](https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/)anglejsイベントシステムの詳細については、こちらをご覧ください。 –

+0

@StanislavKvitashこれは伝統的なコードなので、私は知らないし、それを書いた人はいなくなってしまった。 – user8565199

+0

@StanislavKvitash私は$ scopeを使ってその問題を解決するとは思わない? – user8565199

答えて

0

が、これはおそらく、正常に動作しなければならない

$scope.$broadcast 
$scope.$on 

を使用し、その後

scope : true 

を設定し、我々は問題

0
のよりよいビューを持っているので、あなたのコードを投稿

あなたは親と子の間のコミュニケーションを探していますが、bこれを使用して両方の指令を強固に結合します。

コントローラが必要です - 親ノード指令コントローラの同じノードのハンドルを取得します。 が必要です:親ノードのコントローラを見つけるために '^ parnetDireName'が使用されています。 ^がなければ、同じノードだけが見つかります。 '?' "^^"、 "?^^"、 "^^"コントローラを取得するためにリンク関数の4番目のパラメータが使用されます。コントローラのprop /メソッドを使用できます。アクセス多重コントローラアレイを有することになる必要があるため - 必要:[「^ DIR1」、「^ DIR2」] リンク機能がCNTRL配列を有し、それは同じ順序で

配列要素を介してアクセスすることができます。ネストされたディレクティブの事前のリンクとポストリンク機能 -

  • デフォルトのリンク機能は、ポストリンク機能である
  • 使用キーワードの記事を親と子の場合は、明示的に
  • チャイルドポストリンク機能は、両方の最初に実行され、親と子の両方が事前にリンク機能を持っている場合はポストのリンク機能
  • 親リンク機能が最初に実行されていることを定義します。
  • コントローラは、リンク機能

--------------------------------- 別のを前に実行されますデカップリングされた方法 --------------------- ディレクティブスコープとコントローラースコープとの関係を設定するには、次の3つの方法があります。 - ディレクティブと共有スコープを含む。新しい
ディレクティブによるアイテム/変更アイテムはすべて、親スコープの一部になります。 デフォルトまたはスコープ:false - 継承スコープのディレクティブです。指令で追加された新しい項目は、コントローラを含むことで表示されません。指令スコープは、親スコープからすべてのデータを読み取ることができます。有効にするにはスコープ:trueプロパティを使用します。子は親データを見ることができ、新しい変数を上書きまたは作成することができます。
-隔離された範囲。両方のスコープが互いにデータを読み取ることはできません。親データを読み取るにはオブジェクトマッピングが必要です。ディレクティブスコープマッピングはオブジェクト名を持ち、同じオブジェクトがhtmlから渡されます。 完全なオブジェクトデータ - - PARAMETER- を受信するための3つの方法があります>「=」 使用されている - ストリング]「@」が使用されるようにフラグのような単純な値を。 '@ sampleVar'、ここでsampleVarはhtml内の変数の名前です。 スコープ{cntrollerStrVarName '@htmlStrVarName' }
- 機能パラメータ - '&' は、パラメータを渡すために使用されます。メソッドのパラメータは({paramName: 'value'})を使用してオーバーライドすることができます