この質問では、アプリケーション全体の条件 (プラットフォーム依存のビルド) でコンポーネントをコンパイルする必要がある環境を考慮しています。したがって、ソリューションは Angular 2 のテストからモッキング手法を借りることができますが、本番環境 (AoT を含む) に適用する必要があります。
既存のクライアント側ブラウザー アプリケーションがあることを考慮して、他のプラットフォームの一部のコンポーネントのコンパイルを無効にするか、コンポーネント全体をオーバーライドする必要がある場合があります (Angular Universal サーバー側レンダリングまたはモバイル アプリケーション)。
一部のディレクティブとコンポーネントは、望ましくないため、他のプラットフォームでコンパイルしないでください。いえ
<client-side-only>fallback HTML contents</client-side-only>
アプリケーションの初期化後も変更されないはずです。
次の 2 つのケースをカバーする必要があります。
- ディレクティブ/コンポーネントのコンパイルを防ぐ
- ディレクティブ/コンポーネントを置換または同じセレクターを持つスタブでオーバーライドする
AngularJS では、条件付きでディレクティブをアプリに追加し、必要な場所で使用するのと同じくらい簡単です。
.directive('clientSideOnly', () => ({ terminal: true, priority: 10000 }));
または、デコレータを使用して定義済みのコンポーネント/ディレクティブの動作を変更します。
.decorator('clientSideOnlyComponentDirective', ($delegate) => ...));
これらの Angular 1.x のトリックに対応するものは Angular 2 にありますか?
最小量の WET コードを使用して、Angular 2 でディレクティブとコンポーネントをオーバーライドまたはコンパイルから防止するにはどうすればよいですか?