🌷 を返します。
+
+🌿 値を使用していたが、コンポーネントの `providers` 配列にカエデの葉 🍁 が含まれている場合、Angular はカエデの葉 🍁 を無視して、シダ 🌿 を使用します。
+
+これをコードで確認するために、親コンポーネントが使用する `emoji` の次の値を想定します。これは、このサービスと同じです。
+
+🍁 が含まれていると想像してください。ただし、親の値を使用したいとします。
+これが、 `@SkipSelf()` を使用するタイミングです。
+
+🍁 ではなく、シダ 🌿 になります。
+
+#### `@SkipSelf()` と `@Optional()`
+
+`@SkipSelf()` と `@Optional()` を使用すると、値が `null` の場合にエラーを防ぐことができます。
+
+次の例では、 `Person` サービスがコンストラクターで注入されています。
+`@SkipSelf()` は、Angularに現在のインジェクターをスキップするように指示し、 `@Optional()` は `Person` サービスが `null` の場合にエラーを防ぎます。
+
+🌷 を使用します。
+
+## テンプレートの論理構造
+
+コンポーネントクラスでサービスを提供する場合、サービスは、サービスの提供場所と方法に応じて、 `ElementInjector` ツリー内で可視になります。
+
+Angularテンプレートの基になる論理構造を理解すると、サービスの構成と、その可視性の制御のための基礎が得られます。
+
+コンポーネントは、次の例のようにテンプレートで使用されます。
+
+🌺 である、 `root` に提供される `FlowerService` があります。
+
+Emoji from FlowerService: {{flower.emoji}}
+Emoji from FlowerService: {{flower.emoji}} (🌺)
+Emoji from FlowerService: {{flower.emoji}}
+Emoji from FlowerService: {{flower.emoji}} (🌺)
+Emoji from FlowerService: {{flower.emoji}} (🌻)
+ #VIEW> +🌻 を使用して解決されます。
+インジェクターは、インジェクターツリーをさらに検索する必要はありません。
+`FlowerService` を見つけるとすぐに停止し、赤いハイビスカス 🌺 は見えません。
+
+### `viewProviders` 配列を使用する
+
+`viewProviders` 配列は、 `@Component()` デコレーターでサービスを提供する別の方法です。
+`viewProviders` を使用すると、サービスは `<#VIEW>` で可視になります。
+
+HELPFUL: ステップは `providers` 配列を使用する場合と同じですが、 `viewProviders` 配列を使用する点が異なります。
+
+ステップバイステップの手順については、このセクションを続行してください。
+自分で設定できる場合は、[サービスの可用性を変更する](#visibility-of-provided-tokens) に進んでください。
+
+デモのために、 `AnimalService` を作成して、 `viewProviders` を示します。
+最初に、 `emoji` プロパティがクジラ 🐳 である `AnimalService` を作成します。
+
+🐶 の値があります。
+
+Emoji from AnimalService: {{animal.emoji}}
+Emoji from AnimalService: {{animal.emoji}}
s +Emoji from AnimalService: {{animal.emoji}} (🐶)
+ #VIEW> +🐶 の `AnimalService` 値が見つかります。
+インジェクターは、 `ElementInjector` ツリーをさらに検索する必要も、 `ModuleInjector` を検索する必要もありません。
+
+### `providers` と `viewProviders` の違い
+
+`viewProviders` フィールドは、概念的には `providers` と似ていますが、1つの顕著な違いがあります。
+`viewProviders` で構成されたプロバイダーは、コンポーネントの論理的な子になる投影されたコンテンツには可視ではありません。
+
+`providers` と `viewProviders` の違いを確認するために、別のコンポーネントを例に追加して、 `InspectorComponent` と呼びます。
+`InspectorComponent` は、 `ChildComponent` の子になります。
+`inspector.component.ts` で、コンストラクターに `FlowerService` と `AnimalService` を注入します。
+
+Emoji from FlowerService: {{flower.emoji}}
+Emoji from AnimalService: {{animal.emoji}}
+🐶 は、 `ChildComponent` の `<#VIEW>` 内に宣言され、投影されたコンテンツには可視ではないことを覚えておいてください。
+代わりに、投影されたコンテンツには、クジラ 🐳 が表示されます。
+
+ただし、次の出力セクションでは `InspectorComponent` は `ChildComponent` の実際の子コンポーネントです。そして `InspectorComponent` は `<#VIEW>` の内側にあるため、 `AnimalService` を要求すると、犬 🐶 が表示されます。
+
+論理ツリー内の `AnimalService` は、次のようになります。
+
+Emoji from AnimalService: {{animal.emoji}} (🐶)
+ +Emoji from AnimalService: {{animal.emoji}} (🐳)
+Emoji from AnimalService: {{animal.emoji}} (🐶)
+ #VIEW> +🐳 が表示され、犬 🐶 は表示されません。これは、犬 🐶 が `🐶 を表示できます。
+
+### 提供されたトークンの可視性
+
+可視性デコレーターは、論理ツリー内でインジェクショントークンの検索を開始する場所と終了する場所を制御します。
+これを行うには、可視性デコレーターを注入ポイント、つまり `constructor()` に配置し、宣言ポイントに配置しないでください。
+
+インジェクターが `FlowerService` の検索を開始する場所を変更するには、 `🌺 値が見つかります。
+UIには次のように表示されます。
+
+🌻 を提供しますが、アプリケーションは赤いハイビスカス 🌺 をレンダリングします。これは、 `@SkipSelf()` によって現在のインジェクター(`app-child`)が自身をスキップして親を調べるためです。
+
+`@Host()` を追加すると(`@SkipSelf()` に加えて)、結果は `null` になります。
+これは、 `@Host()` が検索の上限を `🐶 です。
+インジェクターは、 `🐳 は見えません。
+
+`FlowerService` の例と同様に、コンストラクターに `@SkipSelf()` を追加すると、インジェクターは現在の `🐳 を見つけます。
+
+### `@Host()` と `viewProviders`
+
+`@Host()` を単独で使用した場合、結果は犬 🐶 になります。なぜなら、インジェクターは `🦔 を含む `viewProviders` 配列を、 `app.component.ts` の `@Component()` メタデータに追加します。
+
+🦔 を見つけます。
+
+## 例: `ElementInjector` のユースケース
+
+さまざまなレベルで1つ以上のプロバイダーを構成する機能により、便利な可能性が開かれます。
+
+### シナリオ:サービスの分離
+
+アーキテクチャ上の理由から、サービスへのアクセスを属するアプリケーションドメインに制限する必要がある場合があります。
+たとえば、悪役のリストを表示する `VillainsListComponent` を構築するとします。
+この悪役は、 `VillainsService` から取得されます。
+
+`VillainsService` をルートの `AppModule` で提供すると、 `VillainsService` がアプリケーションのすべての場所で可視になります。
+後で `VillainsService` を変更した場合、誤ってこのサービスに依存し始めた他のコンポーネントで何かが壊れる可能性があります。
+
+代わりに、次のように `VillainsListComponent` の `providers` メタデータで `VillainsService` を提供する必要があります。
+
+