問題タブ [angular2-injection]

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 投票する
3 に答える
723 参照

angular - ブートストラップなしでAngular2インジェクトHttp

環境:

REST Api の POST リクエストを形成するクラスがあります。それを requesterと呼びましょう。私のアプリで行われたすべての ajax 呼び出しは、これを介して送信されます。したがって、HTTPを介して提供したくないため、グローバルになり、リクエbootstrap(foo, [HTTP_PROVIDERS]);スターに注入する必要があります

コード:

エラー:

元の例外: HTTP のプロバイダーはありません! (リクエスタ -> Http)

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

javascript - コンポーネントがサービスの同じインスタンスを使用して互いに通信できるように、サービスプロバイダーをAngular 2階層のどこに配置しますか?

関連する質問:

Observable は angular2 で次の値を受け取らない

angular2 でサービス エラーのプロバイダーがありません。親コンポーネントに挿入する必要があるのはなぜですか?

angular2の他のコンポーネントへの観察可能なトークを使用して、次の値を受け取りません

setCurrentPlaylists 関数を持つ PagesService があります。この関数は他のコンポーネントからトリガーされ、Playlists タイプの値を受け取り、次の関数を使用してこの値をコンソール ログに記録します。

ページサービスのコード全体は次のとおりです。

ページ コンポーネントの私のコードは次のとおりです。

setCurrentPlaylists 関数をトリガーすると、プレイリストがページ コンポーネントに渡されませんでした。渡された値を使用して、ページ コンポーネントのプレイリストを更新する必要があります。

これは、setCurrentPlaylsts 関数をトリガーした後のコンソール出力です。ページ コンポーネントからのメッセージはありません。 ここに画像の説明を入力

どんな提案でも大歓迎です!

このコンポーネントから setCurrentPlaylists 関数を呼び出します

これは私のコンポーネントツリーです: ここに画像の説明を入力

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

unit-testing - Angular 2 rc5 、インジェクションを使用するパイプの単体テストの問題

angular2 rc 5 を使用しています。json から値を取得するカスタム パイプを作成しました。カスタム パイプ :literal.pipe.ts は次のようになります。

MessageService.ts :

Bundle.json にはキーと値のペアがあります。

liteServer を使用して単体テストを実行しています。私の unitTests.html:

literal.pipe.spec.ts は次のとおりです。

npm test を実行し、ブラウザーで開く unitTests を表示すると、次の例外が発生するため、仕様ファイルのどこかで問題が発生しているようです。

これを機能させるには、何を変更する必要がありますか。

0 投票する
3 に答える
697 参照

angular - Angular2: コンストラクターでプロバイダーをインスタンス化するためにプライベート アクセス指定子を使用する理由

コンストラクターでプロバイダーをインスタンス化するためだけにプライベート アクセス指定子を使用するのはなぜですか? プライベート アクセス指定子のみを使用する特定の理由はありますか?

個人注射

公衆注射

0 投票する
3 に答える
1685 参照

angular - Angular2 RC6 HttpModule 手動インジェクション

プロジェクトを angular2 RC4 から RC6 に移行しています。必要なカスタム フォーム バリデーターがありますHttp。移行前は を と一緒に使用しReflectiveInjectorていましたHTTP_PROVIDERSが、RC6 ではHTTP_PROVIDERS非推奨であり、存在しないため、これはもはや不可能です。これは Validator の静的メソッドです。

に置き換えるだけでは機能HTTP_PROVIDERSしませんでした。テストに関して、 stackoverflow ( NG2 RC5: HTTP_PROVIDERS is deprecatedHttpModule )で同様の問題を見つけましたが、唯一の答えはテストに固有のものです。

このカスタム Validator に別の解決策またはより良い解決策がある場合、手動で「注入」する方法、HttpまたはHttpModuleRC6 を使用する方法を教えてください。

前もって感謝します。

更新:checkVatメソッドは静的です。そのため、ReflectiveInjector を使用する必要があり、他の場所と同様に、コンストラクターを介して注入するだけではありません。カスタム Validator は次のように使用されます。

UPDATE2: Günther Zöchbauer の回答の助けを借りて、次のようにコードを変更して、静的関数なしで動作し、手動インジェクションを必要としないようにしました。

バリデーター:

輸出クラスVatValidator {

}

FormControl を持つコンポーネントで:

0 投票する
6 に答える
27344 参照

angular - テスト - (ClassName) のすべてのパラメーターを解決できません

環境

ApiService独自のシリアライザーとその他の機能を使用しながら、カスタム API クエリを処理できるクラスを作成しました。

ApiServiceのコンストラクターの署名は次のとおりです。

  • MetaManagerAPI のメタデータを処理する注入可能なサービスです。
  • ApiConnectorServiceHttpカスタムヘッダーと署名システムを追加するためのラッピングサービスです。
  • EventDispatcherは基本的に Symfony のイベント ディスパッチャー システムであり、typescript で記述されています。

問題

をテストするときApiServiceは、 で初期化を行いますbeforeEach

そしてそれはうまくいきます。

次に、 用の 2 番目のスペック ファイルを次のように追加ApiConnectorServicebeforeEachます。

そして、すべてのテストが次のエラーで失敗します。

エラー: ApiService のすべてのパラメーターを解決できません: (MetaManager、?、EventDispatcher)。

  • api-connector-service.spec.tsロードしたテストから(ApiConnectorServiceの仕様ファイル)を削除すると、ApiServiceのテストは成功します。
  • api-service.spec.tsロードしたテストから(ApiServiceの仕様ファイル)を削除すると、ApiConnectorServiceのテストは成功します。

なぜこのエラーが発生するのですか? 私の 2 つのファイル間のコンテキストが競合しているように見えますが、これを修正する理由と方法がわかりません。