問題タブ [angular-broadcast]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 子コンポーネントが親からブロードキャストを受信していない
Angular 1.5 で単純なグリッド コンポーネントを構築していますcomponent
。構造は次のとおりです。
は<grid-component>
にイベントをブロードキャストし<grid-header>
ますが、ヘッダー コンポーネントはメッセージを受信していません。
これが私の使い方の簡単な例です。
興味深いことに、スコープを調べると、それらは実際にはスコープ階層の兄弟であるということです。
親
子
両方の親のメモ ID は同じです。また、子の prevSibling が親であることに注意してください。
変更$scope.$broadcast
する$scope.$parent.$broadcast
と、兄弟であるため、期待どおりに機能します。
コンポーネントがネストされている場合、Angular がこれらを兄弟と見なすのはなぜですか? また、$parent
チェーンをたどらずにイベントをブロードキャストする方法はありますか?
javascript - AngularJS: 動的に追加されたコントローラー間の通信
これは、StackOverflow に関する私の最初の投稿/質問です。改善できる点があれば、アドバイスをください :)。
それでは、問題に飛び込みましょう。
簡単にするために、コードの無関係な部分を削除し、必要なファイルのみを示しました。
上記のスニペットは期待どおりに動作します -$broadcast
が呼び出され、すべてのコントローラーがメッセージを受信して反応します。私のアプリケーションでは、ブロードキャストはコントローラーが送信することによってのみ受信されます。この問題は、動的な HTML 挿入が原因であると思います。
要件は、ページの読み込み時にコントロールを動的にレンダリングすることです。私は次のアプローチを使用してコンテンツを生成しています。
すべてのコントロールで同じロジックを共有しているため、同じコントローラーを使用しています。
機能、コントローラーの作成に関するガイド、モジュールとサービスの定義に関する多くの資料を読みました(これにより、注入されたサービスの作成についてのアイデアが得られ$broadcast
ます)。$emit
$rootScope
現在、角度フレームワーク( AddWidgets関数)の外で角度コンテンツを生成すると問題が発生する可能性があると考えています(@stackoverflow/a/15676135/6710729)。
スパイダーセンスアラームが発生したのは、JSFiddle の例で同様の状況 ( http://jsfiddle.net/XqDxG/2342/ ) を確認したときです-コントローラーの親子関係はありません。$$nextSibling
コントローラーの angulat スコープをのぞくと、$$prevSibling
プロパティが満たされていることがわかります。私の場合、これらは[ここ]にnull
編集されています。
問題を解決するためのガイドラインを教えてください。私はAngularJSにかなり慣れていませんが、アプリケーションを開発しているときに学習しています。
angularjs - $scope.$on 内から $scope にアクセスする
私はこのコードを持っています:
$broadcast からデータを取得しました。問題ありません。$scope.switchStay 関数内からディレクティブの $scope にアクセスする必要があることを除いて。それを達成する方法はありますか?