[解決済み] アプリの設定でカスタムプロバイダ内の$httpを使用する、angular.js
質問
主な質問 - それは可能ですか?私は運が悪いと試みました...
メインapp.js
...
var app = angular.module('myApp', ['services']);
app.config(['customProvider', function (customProvider) {
}]);
...
プロバイダ自身
var services = angular.module('services', []);
services.provider('custom', function ($http) {
});
で、こんなエラーが出ました。
Uncaught Error: Unknown provider: $http from services
何かアイデアはありますか?
ありがとうございます。
どのように解決するのですか?
一番下の行は
- あなたは できません プロバイダ設定セクションにサービスを注入する .
- あなたは 可 プロバイダのサービスを初期化するセクションに、サービスを注入することができます。 .
詳細
Angularフレームワークは、2段階の初期化処理を行います。
フェーズ1: 設定
設定中に
config
フェーズでは、すべてのプロバイダが初期化され、すべての
config
セクションが実行されます。このとき
config
セクションはプロバイダオブジェクトを設定するコードを含むことができるので、 プロバイダオブジェクトと一緒にインジェクトすることができます。
しかし、プロバイダはサービスオブジェクトのファクトリであり、この段階ではプロバイダは完全に初期化/設定されていませんので、 ->
この段階では、プロバイダにサービスを作ってもらうことはできません -> 設定段階では、サービスを使用/注入することはできません
.
この段階が完了すると、すべてのプロバイダが準備完了となります(設定段階が完了した後は、これ以上プロバイダの設定を行うことができません)。
フェーズ 2: 実行
走行中
run
フェーズでは、すべての
run
セクションが実行されます。この段階では
の間に、プロバイダはサービスを作成できるようになります。
run
フェーズでは、サービスを使用/注入することができます。
.
例を示します。
1. 注入する
$http
サービスをプロバイダ初期化関数
は使用しません。
動作
<ブロッククオート
//ERRONEOUS
angular.module('myModule').provider('myProvider', function($http) {
// SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
...
this.$get = function() {
// code to initialize/configure the SERVICE goes here (executed during `run` stage)
return myService;
};
});
を注入しようとしているのですから
$http
の間に実行される関数にサービスを注入しようとしているので
config
フェーズで実行される関数に変換すると、エラーが発生します。
Uncaught Error: Unknown provider: $http from services
このエラーが実際に言っていることは
$httpProvider
を作成するために使用される
$http
サービスはまだ準備ができていません (私たちはまだ
config
の段階なので)。
2. 注入する
$http
サービスをサービス初期化関数
will
が働きます。
//OK
angular.module('myModule').provider('myProvider', function() {
// SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
...
this.$get = function($http) {
// code to initialize/configure the SERVICE goes here (executed during `run` stage)
return myService;
};
});
の間に実行されるサービス初期化関数にサービスを注入しています。
run
フェーズで実行されるサービス初期化関数にサービスを注入しているので、このコードは動作します。
関連
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] javascriptでオプションのパラメータを扱う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]