問題タブ [angular-providers]

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

javascript - Angular provider configuration reset when service injected into somewhere else

Not an easy one to describe this, but basically I have a service which is set up as a provider so I can configure it. It has an array of APIs used in my project which is initially empty. Various config blocks can add an API object to the array and this seems to be working. I console.log the output each time and the array is growing.

I then inject my service into something else (in this case an $http interceptor function) and use a service method to return the array, but each time I get an empty array.

I thought the way this worked is that all config blocks ran first and that the $http call which is being intercepted is happening way after that, so the array should be full of APIs by the time it's intercepted.

Anyway, here's some code

#xA;

And an example config block

#xA;

So, each time the appApi method is called in a config block (twice here), this line outputs the array console.log("API added", _apis); and it correctly outputs 1 item after the first call and two items after the second call.

When this code - authService.getApis() - fires the first time an HTTP call is intercepted, it logs an empty array to the console.

Any help would really be appreciated.

EDIT:

The problem seems to be this line

var injector = angular.injector(['ng', 'authModule']);

My provider seems to be reset/recreated each time this happens, so maybe I'm misunderstanding how to use the injector. I was originally just injecting my authService the normal way in the function parameters but I was getting a circular dependency (my auth service needs to open a modal window, but angular-ui modals rely on the http service and my http calls are being intercepted to check with my auth service that the user is authenticated :( )

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

angularjs - angular .value と .constant を使用して初期化値とユーティリティ関数を保存する必要がありますか?

多くのモジュール、ファクトリ、およびコントローラーで構築されたかなり複雑な angularJS アプリケーションがあります。

これが開始されたとき、アプリケーションで使用される初期化変数と定数を格納するために parameters.js ファイルを使用しました。これらの値の一部は定数であり、その他はアプリケーションによって更新される可能性があります (言語、検索日など)。これは角度要素ではなく、これらの値を内部に持つ単なる js オブジェクトです。私の質問は、これもモジュール内にある必要がありますか? これをモジュール内に保持する利点はありますか? もしそうなら、.value と .constant を使ってそれを行う最善の方法は何ですか? 工場を作る?

また、同様の問題ですが、この場合はユーティリティ関数jsファイルに関するもので、日付を解析する関数と、アプリケーションのさまざまな場所で使用されるその他のものがあります。これはモジュールに格納する必要がありますか? 繰り返しますが、それを行う方法は何ですか?工房?

どんなヒントでも大歓迎です。ありがとう!

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

angularjs - 装飾された $log は、ngMock が原因で単体テストで失敗します

プロジェクトでは、メソッド .prefix() を公開する $log サービスを装飾しました。のように使います$log.prefix('Some Prefix text here')

これは、$log in を使用するすべてのモジュールで正常に機能しますが、単体テストでは機能しません。

$log.prefix は関数ではありません

ngMock モジュールで $log を変更する必要があります。すべてのモジュールで $log.prefix を使用しているため、これらのモジュールのすべての単体テストを書き直す必要はありません。

質問: ngMock の $log メソッドをデコレートする方法はありますか?

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

angularjs - プロバイダ 'FileUpload' は、$get ファクトリ メソッドから値を返す必要があります

AngularJs で作成された Web アプリケーションには、ユーザーがファイルをアップロードできるページがあります。しかし、私はいくつかの問題を抱えています。これは、アップロードを行う Factory です。

ファイルをアップロードしようとすると、コンソールに次のエラーが表示されます。

これは、コントローラーの関数です。

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

angularjs - 不明なプロバイダー

Web アプリケーションの AngularJS コードで非常に奇妙なエラーに遭遇しました。

データベースに新しいデータを挿入するためのフォームを持つアプリケーションがありますが、その前に一致を探します。

ここで、データベースに挿入するオブジェクトには一連のコレクションがあり、それが既に存在する場合、アプリケーションはコンテンツ全体を UI に表示し、ユーザーはコレクションに新しいアイテムを追加できます。

コレクションは、それぞれが独自のビューを持ち、navbar メニューからそれらに独立してアクセスできるエンティティで構成されているため、フォームで add new item メソッドを呼び出すと、実際には前のものからリサイクルされます。これが面白い部分です。

私はフォームでそれらのうちの 3 つを実行しましたが、それらはすべて正常に動作し、同じビューが表示され、同じ機能を備えていますが、4 つ目を試してみると、次のエラーが表示されます。

さらに面白いことに、別のエンティティ ビュー アクセスで使用されるものと同じコードをコントローラーとビューに使用していますが、フォームから実行すると機能しません。

ページング パラメータ インジェクションを削除すると、ビューが読み込まれますが、もちろん、すべての機能が失われます。

コードは次のとおりです。

コントローラ:

HTML コードからの呼び出し:

フォームコントローラーの関数:

このプロジェクトには何千行もの行があるため、最も関連性の高いコードと思われるもののみを投稿していますが、必要に応じて、さらにコードを投稿してもかまいません

よろしくお願いします

スティーブン

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

angularjs - Angular Google マップ、遅延読み込み、2 回目

angular-ui.github.io/angular-google-maps/ を使用しています

推奨される遅延読み込み手法を使用します。これは app.js にあります。

そして、コントローラーのある時点で、これを実行します。

そのため、オフラインになるとタイマーが作動し、ユーザーをログイン ページに戻します。(もともと私は単にアプリを終了します。Android では動作しますが、iOS では動作しません。実際には Apple によって禁止されています)。

だから...それが今私がログインページに送り返している理由です。

ここで、ログイン ページで、wifi を再アクティブ化します....地図を表示する (はずの) ページに戻ると.... 壊れます。uiGmapGoogleMapApi.then の成功ハンドラーは呼び出されません。(Dude.01 は印刷されますが、Dude.02 も Dude.03 も印刷されません)。

だから...そのページは(間違って)デバイスがまだ切断されていると考えています。

これは、Google マップの JavaScript の読み込みが 1 回しか行われないためだと思います (読み込み中 - そのため、アプリを閉じて元に戻すと、問題なく動作します)。

だから...それは本当に遅延読み込みではありません(?)。または...遅延読み込みの場合、次のようなシナリオをサポートしていないようです... 2回目の読み込みを試してください(接続のために最初の読み込みが失敗した場合)。

angular-ui.github.io/angular-google-maps/ のソースコードに精通していて、この問題の解決策を提案できる人はいますか?


ライブラリのコードに入力したログを調べたところ、結論に達しました。2 回目に uiGmapGoogleMapApi.then を呼び出したときに、183 行目を再実行する方法が必要です。現在はそうではありません。アプリを起動したときに最初に呼び出され、最初からインターネットに接続しているだけです。

ここに画像の説明を入力


そして、「プロバイダー」に関するこのドキュメントから理解したことに基づいて、2回目に使用しようとするときに(直前に)uiGmapGoogleMapApiを再インスタンス化する必要があります。

https://docs.angularjs.org/api/auto/service/ $provide

そうですか?どのように?


ここでプロバイダーのキャッシュと戦っているようです。コントローラーで依存性注入を使用して、uiGmapGoogleMapApi への参照を取得するためです。(私は .controller('myctrl', function(uiGmapGoogleMapApi) {...} を持っています)

私が必要とするかもしれないものは次のとおりです。


試したばかりですが、まだうまくいきません。

助けてください。

ありがとう、ラカ


さて、私の「解決策」は次のとおりです。ログインページに移動する代わりに、ウィンドウオブジェクトの現在のURLをindex.htmlに設定して、アプリを更新するだけです。