問題タブ [angularjs-provider]
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.
angularjs - config フェーズで provider.$get を介してファクトリ関数にアクセスしてはならないのはなぜですか?
まず、これは率直な質問です。そして、なぜ私がこれをすべきでないのかについて、正直で正当な答えを探しています...
ここに JSFiddle があります: http://jsfiddle.net/1vetnu6o/
これは上記のように機能しており、いくつかの問題を解決します。しかし、私はおそらくこれを行うべきではなく、その理由を理解したい. これをしない正当な理由が本当に必要です。私が本当にしたいという事実にもかかわらず。
tl;dr;
これが問題のコンテキストです...
基本的に関連するヘルパー メソッドのグループを含むこの 1 つのサービス (たまたまファクトリ) がある複数の製品で使用されるこの内部フレームワークがあります。この場合、デバイス関連のisMobileDevice
, isAndroid
, getDeviceType
(戻り値mobile
,tablet
またはdesktop
)、およびその他のいくつか...
config()
このサービスは、関数へのアクセスが必要なため、フレームワークを使用してアプリケーションのフェーズに挿入する必要がありますgetDeviceType
。deviceType
問題は、 で適切なテンプレートをロードするために を取得する必要があるということです$routeProvider
。config()
すべてのルートに使用される正しいテンプレート パスを構築している段階です。に依存するものもあれdeviceType
ば、デバイスに依存しない汎用テンプレートを持つものもあります。
これはサービスであるため、フェーズに直接注入することはできませんがconfig()
、この記事で前述した手法を使用してそのメソッドを呼び出すことができます。
現在、これをどのように解決していますか?ヘルパー サービスは実際にはプロバイダーであり、すべてのメソッドはプロバイダー セクションとファクトリ関数の両方で公開されます。理想的ではありませんが、機能します。私はこれを回避策と考えていますが、フレームワークではなくアプリケーションで回避策を講じたいと考えているため、最初に言及した手法です。
考え?
angularjs - AngularJS: .config 関数にプロバイダーを挿入する
UserAgent
関数内で呼び出された AngularJS プロバイダーの挿入に失敗してい.config
ますが、次のエラーが発生しています。
これは私の設定です:
そして、これは私のプロバイダーです:
angularjs - AngularJS : リッチで階層的なオブジェクト モデルを使用して、コントローラーとファクトリ/サービスをどのように構造化する必要がありますか?
私は次の 2 つの素晴らしい記事を読みました。
Jonathan Creamerによる angularjs コントローラーの状態
と
Todd Motto によるAngularJS コントローラーの再考
これらの記事では、コントローラー (ビューとモデルの間の貧弱なブリッジを作成する) とファクトリー/サービス (ビジネス ロジックが実際に存在する必要がある場所) の正しい使用方法について著者が説明しています。
これは素晴らしい情報であり、自分のプロジェクトの 1 つでコントローラーのリファクタリングを開始することに非常に興奮しましたが、リッチ オブジェクト モデルを使用すると、記事に示されている構造が崩れることがすぐにわかりました。
「Angularjs コントローラーの再考」のセットアップの要約を次に示します。
コントローラーは次のとおりです。
そしてここに工場があります:
これは素晴らしいことです。providers
(ファクトリは) シングルトンであるため、データはビュー間で維持され、API からリロードすることなくアクセスできます。
これは、トップレベルの object である場合messages
にうまく機能します。しかし、そうでない場合はどうなりますか? これが他のユーザーの受信トレイを閲覧するためのアプリだとしたら? あなたは管理者で、すべてのユーザーの受信トレイを管理および閲覧できるようにしたいと考えているかもしれません。複数のユーザーの受信トレイを同時にロードする必要があるかもしれません。これはどのように作動しますか?問題は、受信トレイのメッセージがサービスに保存されることInboxFactory.messages
です。
階層が次のような場合はどうなりますか。
現在messages
、階層のいくつかのレベルが深くなっており、それ自体には意味がありません。InboxFactory.messages
一度に複数のユーザーのメッセージを取得する必要があるため、ファクトリにメッセージを保存することはできません。
これで、OrganizationFactory、DepartmentFactory、UserFactory、および InboxFactory が作成されます。「メッセージ」の取得は、 のコンテキスト内にある のコンテキスト内にある必要がuser
ありdepartment
ますorganization
。データはどのように、どこに保存する必要がありますか? どのように取得する必要がありますか?
では、これをどのように解決すべきでしょうか。コントローラ、ファクトリ/サービス、およびリッチ オブジェクト モデルをどのように構築する必要がありますか?
私の考えのこの時点では、リッチなオブジェクト モデルを持たずに、無駄のないものにすることに傾いています。コントローラーに注入された $scope にオブジェクトを保存するだけで、新しいビューに移動する場合は、API からリロードします。ビュー間でデータを永続化する必要がある場合は、サービスまたはファクトリを使用してそのブリッジを構築できますが、ほとんどの場合、この方法で行うべきではありません。
他の人はこれをどのように解決しましたか?これには何かパターンがありますか?
angularjs - モジュールごとに構成が異なる Angularjs プロバイダー
アプリケーション全体ではなく、それを構成しているモジュール全体でのみ、プロバイダーの構成を一意にする方法があるかどうかを知りたいです。
たとえば、プロバイダーの定義を含むモジュール「コア」があります。次に、プロバイダーを使用するモジュール「module1」と「module2」がありますが、特定のモジュールに対して特定の方法で構成する必要があります。
私に起こっていることは、最後に定義されたモジュールで行われた構成が、アプリケーションでプロバイダーを使用する他のすべてのモジュールで行われた構成をオーバーライドすることです。
これを例証するために、この単純なプランカーを作成しました。
angularjs - Angular "Unkown Provider" - routeProvider 構成内でファクトリを使用する方法は?
Angular をいじりながら、ファクトリ、サービス、定数、ルーティング、およびその他のコア コンセプトの使用方法をよりよく理解しようとしています。そこで、node、express、jade、angular を使用して簡単なデモ アプリを作成します。
ここで、routeProvider 構成内で値を使用したいと思います。定数を作成しましたが、これは正常に機能します。将来の使用に備えてより柔軟にするために、ファクトリを構築しますが、これは「不明なプロバイダー」で失敗します。これはAngularでのインスタンス化シーケンスの問題ですか? .config
ファクトリをセクションに挿入できないのはなぜですか? 工場ではなくサービスで同じことを試みる前に、同じエラーが発生しました。単純なタイプミスや構文エラーがなかったことを願っていますが、これまでのところ何も見つかりませんでした。
javascript - AngularJS 2 つのモジュール間でプロバイダーを構成する方法は?
私の概念実証をご覧ください: http://plnkr.co/edit/y3pzFv?p=preview .
2 つのモジュール間でプロバイダーを構成するにはどうすればよいですか?
概要: サービスを一般化し、複数のインスタンスを少し異なる方法で構成しようとしています。
現在、再利用できるように一般化したい Angular Services (factory) がたくさんあります。私の概念実証では、AngularJS 1.3 アプリを 2 つのモジュール 'bob' と 'joe' に分割しようとしています。各モジュールは、food と呼ばれる構成可能な変数を持つプロバイダーを共有する必要があります。再利用可能なサービスを定義し、モジュールごとに個別のインスタンスを作成しようとしています。
プロバイダーに関する Angular のドキュメントを読みました。私が理解していることから、プロバイダーを使用すると、構成可能な部分を .config() に抽出できます。私は何を間違っていますか?Bob's Food が Banana であることを期待しますが、2 番目に構成された Joe's Food は Bob's Food を上書きしています。これにより、Food プロバイダーは「bob」モジュールと「joe」モジュールのそれぞれに対して新しいインスタンスを作成していないと思われます。
私はAngularJS v1.3.15を使用しています
index.html
app.js
angularjs - 基本プロバイダー (プロバイダー ファクトリではない) から継承する方法は?
この基本プロバイダーがあるとします。
そして今、これらの 2 つの他のサブプロバイダー:
同じ実装を使用しながら、プロバイダーごとにその値を呼び出して保存できるように、プロバイダーセクションを作成ClientA
およびClientB
継承するにはどうすればよいですか?BaseClient
clientAProvider.setSomething('aaa')
clientBProvider.setSomething('bbb')
setSomething
これらのプロバイダー (これら 2 つ以上) がたくさんありますが、プロバイダー セクションは常に同じで、構成の実装は常に同じですが、これらのプロバイダーのファクトリ セクションは異なります。
考え?