2017-01-27 9 views
1

数週間前にAngular 2を使い始めましたが、ここで何か問題が発生しています。私は、Ionic 2で再利用可能なカスタムコンポーネントを作成したいと考えています。たとえば、異なるサイズのカスタムボタンを作成することに決めたとします。 sm-sizeroundedは私のコンポーネントに特定のCSSコードを注入しますAngular 2の複数のディレクティブを操作する方法

<btn-custom sm-size rounded> </btn-custom>

。属性ディレクティブだと思っていましたが、どうやってそれを操作できるのか分かりません。誰かがそれを理解するのを助けてくれますか?

答えて

0

@Input()を使用できますかsがあなたの成分の含有量にスタイルとクラスを適用するように設定するかどうか、あなたは、ホスト要素と[style.xxx]にスタイルやクラスのバインディングを適用するために@HostBinding()を使用することができ、[ngStyle][class.xxx]、および[ngClass]されています

@Component({ 
    template: ` 
<button [style.with.px]="smSize ? 250 : 150">click me</button> 
<!-- or --> 
<button [ngClass]="smSize ? 'big' : 'small'">click me</button> 
}) 
class ButtonCustom { 

    private _smSize:boolean; 

    get isSmSize:boolean() { 
    return this._smSize; 
    } 

    @Input() 
    set smSize(value:any) { 
    this._smSize = value != 'false'; // treat everything as `true` except `'false'` 
    } 

    @HostBinding('style.border-radius') 
    borderRadius:number = 0; 

    private _rounded:boolean; 

    get isRounded:boolean() { 
    return this._rounded; 
    } 
    @Input() 
    set rounded(value:any) { 
    this._rounded = value != 'false'; // treat everything as `true` except `'false'` 
    this.borderRadius = this._rounded ? 3 : 0; 
    } 
} 

セッター属性が値なしで設定されているかどうかについての情報を取得する方法です

<btn-custom smSize rounded> 

<btn-custom smSize="50" rounded="true"> 
<btn-custom [smSize]="50" [rounded]="true"> 
+0

申し訳ありませんが、これが動作するのは確かですか? 'cuz私がそれを使用しようとしたときに、私は次のメッセージを受け取りました:"処理されていない約束の拒絶:引用は評価のためにサポートされていません! :;タスク:Promise.then;値:エラー:評価で引用符がサポートされていません!(...)エラー:評価では引用符がサポートされていません! –

+0

申し訳ありませんが、それはタイプミスでした。最初の ':'は前の行のように '?'でなければなりません。 –

+0

ああ、今それは働いた。しかし、私はまだそれが動作する方法について少し混乱しています。私が設定したいクラスを選択するには、[ngClass] = "smSize? 'big': 'small'" 'という形式を使用したいと考えています。自分のHTMLで使用したいクラスを渡すだけでいいですか? '' –

1

ここでngStyleディレクティブを使用して、適用する追加のスタイルをコンポーネントに伝える必要があります。あなたがスタイルを注入できるスタイルディレクティブを使用して

https://angular.io/docs/ts/latest/api/common/index/NgStyle-directive.html https://angular.io/docs/ts/latest/guide/template-syntax.html#!#ngStyle

あなたが事前に定義されたクラスを持っているなら、ngClassはあなたが必要なもののように見えた、最高の仕事とは:

<btn-custom [ngClass]="{'sm-size rounded' : true}">...</btn-custom> 

https://angular.io/docs/ts/latest/api/common/index/NgClass-directive.html

このガイドでは役立ちます:

https://angular.io/docs/ts/latest/guide/template-syntax.html#!#ngClass

+0

あなたの答えを理解するために、ngClassを使用して、ボタン1のように、私がインクルードするすべてのコンポーネントで使用したいクラスを記述する必要があります: '[ ...'とボタン2: ' ...'です。これは正しいですか? –

関連する問題