問題タブ [angularjs-events]

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.

0 投票する
1 に答える
1402 参照

angularjs - TypeScriptを使用したAngularJS 1:コントローラーのどこに$rootScope.onを配置しますか?

サービス

コントローラ

しかし、それは意味がありません。なぜなら、constructorは (イニシエーションごとに) 1 回しか呼び出されないからです... :\

0 投票する
2 に答える
1146 参照

javascript - ディレクティブ間の通信に最適な方法

ここからコピペ。たぶん、ここでもっと適切な答えを得ることができます!

ディレクティブ間の通信にはかなりの数の方法があるようです。ネストされたディレクティブがあり、内部ディレクティブが何かを外部ディレクティブに伝達する必要があるとします (たとえば、ユーザーが選択したなど)。

これまでのところ、これを行う5つの方法があります

require: 親ディレクティブ

内部ディレクティブは外部ディレクティブを要求することができ、そのコントローラーでいくつかのメソッドを公開できます。したがって、内部定義では

そして、外側のディレクティブのコントローラーで:

$emit イベント

内側のディレクティブは $on を介して、外側のディレクティブが応答できるイベントを $emit できます。したがって、内部ディレクティブのコントローラーでは次のようになります。

および外部ディレクティブコントローラーで:

& を介して、親スコープで式を実行する

アイテムは、親スコープの式にバインドし、適切な時点で実行できます。HTML は次のようになります。

したがって、内部コントローラーには、呼び出すことができる「innerChoose」関数があります

(この場合)外側のディレクティブのスコープで「functionOnOuter」関数を呼び出します。

非分離スコープでのスコープ継承

これらがネストされたコントローラーであることを考えると、スコープの継承が機能する可能性があり、内部ディレクティブは、分離されたスコープがない限り、スコープ チェーン内の任意の関数を呼び出すことができます)。したがって、内部ディレクティブでは次のようになります。

そして外側のディレクティブで:

インナーとアウターの両方に注入するサービスで

サービスは両方のディレクティブに挿入できるため、同じオブジェクトに直接アクセスしたり、関数を呼び出してサービスに通知したり、pub/sub システムで通知を受けるように自身を登録したりすることもできます。これには、ディレクティブをネストする必要はありません。

質問: それぞれの潜在的な欠点と利点は何ですか?

0 投票する
2 に答える
671 参照

angularjs - ページを更新するときに Angular の stateChangeStart イベントが発生しない

カスタム ディレクティブがあります。

そして、それが何をするかというと、状態がそれを持っているとき、そのディレクティブがその値に設定されているページ上のすべての要素を非表示にします。

これはすべて、そのページに自然に遷移せずにそこに転送される場合 (サーバー リダイレクト)、または Ctrl+F5 でページを更新する場合を除いて、すべて非常にうまく機能します。その後、「stateChangeStart」イベントはヒットしません。

ディレクティブは次のように登録されます。

これらの場合、どうすれば状態を取得できますか?

この非常によく似た問題が解決策なしで見つかりました $stateChangeStart ユーザーがブラウザを更新すると機能しません

0 投票する
0 に答える
132 参照

javascript - scope.apply に頼らずに d3.js から angular にイベントを伝播する

angular 1.xコントローラー内でd3.jsライブラリーを使用しています。私の d3.js ライブラリは、div でクリック イベントを作成し、div がクリックされると、角度コントローラーのスコープで何かを更新します。

問題は、スコープ ( $scope.test = "a test") を変更すると、変更がテンプレートにレポートされないことです。

ただし、その d3.js クリック イベント内で $scope.$apply を実行すると (この関連トピックで提案されているように: Angular + D3 - Get scope values to show in template from click event )、dom が更新され、すべてが正常に動作します。

スコープの使用は推奨されていないため、テンプレートに変更を反映させる別の解決策はありますか?

これが私のコードです:

0 投票する
1 に答える
252 参照

angularjs - ブロードキャスト angularjs を使用したディレクティブからディレクティブへの通信

2 つのディレクティブがあり、ポスト リクエストの後に 1 つのディレクティブから別のディレクティブに値を渡す必要があります。

最初のディレクティブは次のようになります

2 番目のディレクティブは次のようになります。

2 番目のディレクティブ イベントはリッスンされません

0 投票する
0 に答える
1800 参照

angularjs - $broadcast を使用してコントローラー間でデータを共有する

コントローラー間でデータを共有するには、サービスを使用するのが一般的です。

共有する必要があるデータがまたは の$rootScope.$broadcast場合、 を使用すると非常に便利であることがわかりました。[]{}

私にとって、ブロードキャストを使用する利点は、データがサービスにロードされているかどうかを確認するためにウォッチャーを使用する必要がないことです。書くコードも少なくなります。

だから私の質問は:

  • $broadcast を使ってもいいですか
  • $broadcast を使用すると不便なことはありますか

私が言いたいことを示すために、両方の「テクニック」を使用したいくつかの例を次に示します。

使用例 $rootScope.$broadcast

サービス利用例

0 投票する
1 に答える
94 参照

angularjs - サービスがイベントを受信しない理由

コントローラーで動作していたコードがいくつかあります。その機能をサービスにリファクタリングして移動しました。コードにはイベント リスナーがありました。

これは、コントローラー内にあるときにキャッチされましたが、サービス内ではイベントをキャッチしません。と を使用$rootScope.$broadcast()$rootScope.$emit()てイベントを通知しようとしましたが、どちらもサービスに巻き込まれません。

サービス コードに特別なことはありません。

質問: ルート スコープでイベントをキャッチするサービスを取得するにはどうすればよいですか?

詳細情報を編集: イベントは別のサービスから通知されます。また、このイベントは他のコントローラーでキャッチされますが、別のサービスではキャッチされません。サービス/ファクトリー、エミット/ブロードキャストなどのすべてのバリエーションを試しましたが、どれも機能しません。サービスはイベントをキャッチしませんが、他のすべての点で完全に機能します.

0 投票する
2 に答える
24 参照

javascript - angularjsの2つの別々のコントローラーで関数を実行するにはどうすればよいですか

と という名前の 2 つの別個の angularjs コントローラーがHomeControllerありSearchControllerます。

という名前の関数がありSearch()ますHomeController

から検索機能を実行するにはどうすればよいsearchControllerですか?