2016-09-21 14 views
0

製品のビューが2つあり、ユーザーの好みに基づいてこれらのビューの1つを表示したいとします。2 - ランタイム中にコンポーネントをインポート/インジェクトする方法

私は2つのビューを持つことを考えています<my-product>は2つの異なるフォルダに管理されており、ユーザーがログインした後、ユーザーがその製品をどのように表示するかに基づいてフォルダからインポートします。

Folder 1 
----MyProductComponent //exports MyProductComponent with selector <my-product></my-product> 
Folder 2 
----MyProductComponent //exports MyProductComponent with selector <my-product></my-product> 
App 
----App.Component // here I would like to import the component at runtime from either folder 1/2 based on user preferences 

これについての洞察をお寄せください。これがコンポーネントレベル(例:ルーティングレベル)で達成できない場合は、代替手段がありますか?

答えて

1

なぜユーザーの好みに基づいてスワップする2つの要素に* ngIfを持たないのはなぜですか?

<my-product1 *ngIf="userPref1"></my-product1> 
<my-product2 *ngIf="!userPref1"></my-product2> 

ここで、userPref1は、ユーザー入力によって設定されるApp.Componentにある変数(または関数)です。

ユーザーは自分の好みを指定することができ、アプリケーションは入力に基づいてビューをスワップし、実行時にインポートする必要はなくなりました。

+0

Thaks Joffutt、私はこれについて考えましたが、私は主なコンポーネント(この場合はApp.Component)を変更しないことを好みます。 を使用している可能性がある場所がたくさんあり、これらの場所をすべて変更する代わりに、環境設定フォルダ(PREF2など)を作成して必要なビューを追加することをお勧めします。私はちょうど実行時にのみ知られているフォルダからコンポーネントをインポートする方法がある場合は願っています。 –

+0

今、私はアイデアを持って.. でエクスポートするもう一つのコンポーネントを作成し、他の場所でそのコンポーネントを使用することができます。私はあなたのものを答えとしてマークします..あなたの入力に感謝します。 –

1

ユーザーの嗜好に基づいて[ngSwitch]を使用し、その特定のコンポーネントを*ngSwitchCaseにロードする必要があります。実際には、コンポーネントを怠っているわけではありません。それらはすべてプリロードされていますが、AngularのDOM操作メソッドを使用して、1つのコンポーネントまたは他のコンポーネントを表示または非表示にします。例えば

:ユーザが自分の好みを変更するとき

<div [ngSwitch]="someUserPreference"> 
    <div *ngSwitchCase="grid"> 
     <my-grid-list></my-grid-list> 
    </div> 
    <div *ngSwitchCase="card"> 
     <my-card-view-grid></my-card-view-grid> 
    </div> 
    <div *ngSwitchDefault> 
     <!-- Incorrect preference, let's show grid as a fallback --> 
     <my-grid-list></my-grid-list> 
    </div> 
</div> 

は基本的に、これはコードに反映されます。ボタン、ラジオボタンなどを使用して設定を変更するか、switch文で使用される変数またはプロパティの値をsomeUserPreferenceに保存する必要があります。

+0

あなたの入力のためのHuseinに感謝、Joffutt同じような意見を共有し、彼は答えとしてマークしました。再度、感謝します!! –

+0

心配しないで@RaviSamanthapudi。あなたの質問に答えたことは重要です。 –

関連する問題