問題タブ [rootscope]

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 に答える
2717 参照

angularjs - ng-repeat Angularjs の $rootScope 変数

2 つの異なるテーブル テンプレートがあります。最初のテーブルで ng-show='template == 1' ディレクティブを使用し、2 番目のテーブルで ng-show='template == 2' を使用して、テーブルの可視性を維持します。コントローラーでテンプレートを 1 または 2 に設定しました。両方のテーブルで ng-repeat = "det in $root.tradedetails" として行を作成し、json をコントローラーから tradedetails に割り当てます。両方のテーブル テンプレートに同じ rootscope 変数 $root.tradedetails を使用できますか? たとえば、最初のテーブルを反復処理する場合は、テンプレートを 1 に設定し、詳細を $root.tradedetails に割り当てます。2 番目のテーブルの表示を自動的になしに設定します。2 番目のテーブル内の ng-repeat が $root.tradedetails を反復するかどうかを知りたいです。

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

angularjs - $rootScope.$on が関数を複数回呼び出さないようにする

コントローラーの上に $rootScope.$on コードがあります。このコントローラーをロード/呼び出すたびに、 $rootScope.$on リスナーが増加することに気付きました。つまり、コントローラーにアクセスすると、無期限にリスナーが追加され、追加され、追加されます。

別のコントローラーから $rootScope.$emit を介して呼び出すと、$rootScope.$on 内の関数が単一のエミット/ブロードキャストであっても複数回実行されることに気付きました。

リスナーが既に存在する場合に新しいリスナーを作成しないように、別のリスナーインスタンスを作成しないようにすることは可能ですか?

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

javascript - Angular: 手動でブートストラップされたアプリに $viewContentLoaded をアタッチします

$rootScope手動でブートストラップするAngularモジュールがあります。イベントリスナーをアタッチするために取得しようとしてい$viewContentLoadedます。

ここに私のコードがあります:

スコープ$id=139を取得していますが、必要なときにイベントが発生しません。

$rootScopeモジュールのメインcontrolelrの内部を取得しようとすると、次のようになります:

私は$rootScopeID 120で取得しますか???

モジュール内のコントローラーにイベントをアタッチすると、イベントハンドラーは正常に機能します。

それで、私は何を間違っていますか?rootScopeコントローラーの外部でモジュールを正しく取得するにはどうすればよいですか?

私は複数のアプリ環境を持っていることに言及する必要があります。他のモジュールをロードしてブートストラップするメインモジュールがあり、この他のモジュールviewContentがコードを手動で追加せずにいつロードを終了したかを知りたいと思っています....

注:次の$rootScopeように取得できます:

しかし、これは次の場合には機能しません$compileProvider.debugInfoEnabled(false);:(

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

angularjs - 複数のアプリは複数のルートスコープを作成しますか?

ここに示すように、同じページに複数のアプリを追加できます。また、angularjsのドキュメントには次のように書かれています

すべてのアプリケーションには単一のルート スコープがあります

では、2 つのアプリをページにマップすると、2 つのルートスコープが作成されるのは理にかなっていますか?

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

angularjs - PassportJS、AngularJS、$rootScope 関数が定義されていません

ログインしてコンテンツを編集できるように、1 人の管理者用のアプリを作成しています。アプリにログインすると、ログインしていない場合に通常の公開ドキュメントが表示されるのではなく、非公開の HTML ドキュメント構造が表示されます。認証にAngular-route、Session、およびPassportを使用しています。ユーザーがサイトの別のページにリンクするたびに、ユーザーがログインしているかどうかを確認したいと考えています。そのため、許可されていない場所に移動すると、サイトのコンテンツを編集できなくなります。

ローカルホストでアプリを実行すると、$injector:modulerr が発生します。ReferenceError は、checkAuth が定義されていないことを示しています。

ここで提案されているように、 $rootScope を使用してグローバル変数を作成しようとしました:

したがって、ユーザーがログインしている場合は true を取得し、ログインしていない場合は false を取得します。しかし、それでも checkAuth is not defined のインジェクター エラーが発生し、コンソール ログがまったく表示されません。

$rootScope の Angular ドキュメントでは、次の形式を使用するように指示されています。

だから、私はこれを試しました:

残念ながら、それもうまくいきません。

これは、Passport と Angular を一緒に使用した例で、私は多少役に立ちましたが、複数のユーザーが登録できるようにしています (これは望ましくありません)。ユーザーは Web サイトの複数のページにログインしています。ただし、同様のコントローラーとルート ファイルを参照すると役立つ場合があります。

以前の同様の質問で提案されているように、ファクトリとサービスを使用して同様のことを行うことができることは知っていますが、別の道を試す前にこのルートに進むことを望んでいました. もちろん、それが最善の方法である場合は、それを試してみます。

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

angularjs - $scope.$on の変更がビューに反映されない

ブロードキャストを行っており、ブロードキャストを聞いているときに、ビューに表示したいスコープの変数を更新しようとしていますが、UI をクリックするまで、変更はすぐにはビューに反映されません。 . この時点で何をすべきか誰でも知っていますが、私は $apply を使用したくありません。ここで、私のコードを見つけてください。