2017-11-30 9 views
0

私の角型アプリでは、私はデータを表示するための2つの異なるレイアウトを実装するコンポーネントを持っています。 1)masonaryのレイアウト 2)リストビュー。角度2の複数のテンプルと同じロジック

したがって、コンテンツテンプルは次のようになります。

<div> 
    <!--Layout one--> 
    <div *ngIf="isGrid"> 
     <div *ngFor="let test of testData"> 
     <layout-one-template [data]="test"></layout-one-template> 
     </div> 
    </div> 
<!--Layout one ends--> 

<!--Layout two starts--> 
    <div *ngIf="isList"> 
     <div *ngFor="let test of testData"> 
     <layout-two-template [data]="test"></layout-two-template> 
     </div> 
    </div> 
<!--Layout two ends--> 
</div> 

両方のレイアウトが異なるだけで、どちらの機能も同じです。

これらのレイアウト用に別々のコンポーネントを作成しました。 どのように私は両方のコンポーネントに同じ機能を使用することができます。 私は同じ機能とデータを2つの異なるcomponent.tsファイルに保存したくありません。 私は私の質問を正しく置くことができたと思います。 テンプレートがコンポーネントスコープに残る方法はありますか?

おかげ

+0

でifthenelseを理解することができ、角度のドキュメントを見ることができ

Chek this post

同じ機能を持っていますか? – mickaelw

答えて

0

OOP継承を使用できます。

レイアウト1テンプレートとレイアウト2テンプレートコンポーネントで拡張されたクラスBaseLayoutTemplateがあります。サンプルについて

:あなたはBaseLayoutTemplateのコンストラクタの引数を持っていない場合は

export class BaseLayoutTemplate { 
    doSomething() { 
    .... 
    } 
    protected doSomething2() { 
    .... 
    } 
} 

export class LayoutOneTemplateComponent extends BaseLayoutTemplate { 
    constructor(){ 
    super() 
    } 
    myFunctionInLayoutOneTemplate(){ 
    this.doSometing() 
    } 
} 

export class LayoutTwoTemplateComponent extends BaseLayoutTemplate { 
    constructor(){ 
    super() 
    } 
    myFunctionInLayoutTwoTemplate(){ 
    this.doSometing() 
    this.doSometing2() 
    } 
} 

super()は必要ありません。もしあなたがそれを持っていれば、スーパークラスはマザークラスのコンストラクタの同じ順序で同じ引数を取る。

メソッドがビューからアクセスできないようにするには、メソッド名の前にprotectedを使うことができる。 BaseClassの方法を拡張したクラスに定義されない必要がある場合は、抽象クラスやメソッドを使用することができます

https://www.typescriptlang.org/docs/handbook/classes.html

0

あなたは、テストデータの一部funstions、または値を返す一部の機能を使用するだけでそこに新しいクラスを作成し、両方のコンポーネントでそれをインポートする必要がある場合。

0

あなたがngifを利用することができますし、角度を使用しているとき4あなたはまた、ifthen他に使用することができましたあなたの要求に正確に答えてください。あなたも、私はあなたの質問のレイアウト-1テンプレートとレイアウト-2-テンプレートを理解していれば、角度4

Angular documentation of ngif then else

関連する問題