2017-05-14 4 views
0

私は種類の異なるオブジェクトを持っています。それにもかかわらず、私はすべてのタイプを私の1つのAngular2コンポーネントに表示したい。ここで 私はそのために使用するコードです:フォルダ構造に応じてコード行を追加する - プリコンパイラ?

in for-loop: 
<div [ngSwitch]="Type"> 
    <c-test *ngSwitchCase="'Test'"></c-test> 
    <c-test2 *ngSwitchCase="'Test2'"></c-test2> 
    <etc> 
</div> 

時間が経つにつれて、私のアプリケーションは、新しいオブジェクトの「タイプ」を追加し、拡張することができます。上記の種類のコードを別の場所で使用しているので、追加された各タイプに対して、これらの場所のすべてに行を追加したくありません。 C++プリコンパイラに似た何かを使用してフォルダ構造を調べ、それに応じてこれらの行を追加する方法はありますか?

例:次のフォルダ構造を持っているとします。私のコードで

Objects 
|- TypeA 
|- TypeB 
|- etc 

、私は、このようなものがあります:に結果の

<div [ngSwitch]="Type"> 
    <precompile *ngFor="some looping through folders">  
     <"c-$FoundFolder" *ngSwitchCase="'$FoundFolder'"><"c-$FoundFolder"> 
    </precompile> 
</div> 

:、私は私がしたいことは、この形で存在していないことを知っている

<div [ngSwitch]="Type"> 
    <c-TypeA *ngSwitchCase="'TypeA'"></c-TypeA> 
    <c-TypeB *ngSwitchCase="'TypeB'"></c-TypeB> 
    <etc *ngSwitchCase="'etc'"></c-etc> 
</div> 

をが、似たようなことを達成する方法はありますか?はいの場合、どうですか?

答えて

1

以下のアプローチは、要件に応じて正確に機能しません。しかし、基本的な意図は、アプリケーションに追加された新しいコンポーネントに基づいて、レンダリングビューを変更することなく、将来的に新しいコンポーネントを動的にロードすることです。この上の角度ウェブサイト上の素晴らしい記事があります:

https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html

それはちょうどあなたがそれぞれの新しいコンポーネントのentryComponentに追加のエントリを作成する必要があり、部品の新しい宣言のために同じままだけ、ということ新しいコンポーネントが宣言されているのと同じモジュールファイルに追加:

entryComponents: [ HeroJobAdComponent, HeroProfileComponent ],

+0

どうもありがとうございました、これは私がやりたいことに非常に近いように思わ!私はそれを試して、それがどうなるかについてコメントします。 – user2065501

+0

この方法では少し問題があります。ドキュメントでは、使用可能なすべてのコンポーネントをデータとともに返す関数を使用します。しかし、私は名前を知ってコンポーネントをロードしたいと思う(またはそれに類するもの)。基本的に、ドキュメントの例を挙げる:広告が既にロードされている ''の代わりに、私はしたいと思います: ' 'ここで、MyAdTypeは文字列またはファイル、またはadd-bannerによってコンポーネントをロードするために使用されるものです。それは可能ですか? – user2065501

+0

サンプルプランナーを作成して、何をしたいのか教えてください。私はあなたを助けることができるでしょう。ありがとう! – Lambo14

関連する問題