2016-04-28 14 views

答えて

1
@Component({ 
    selector: ..., 
    template: ..., 
    styles: [` 
:host(:not(.some-class)) { 
    border: solid 1px red; 
} 
:host(.some-class) { 
    border: solid 3px green; 
} 

` 
]}) 
export class MyComponent { 
    @HostBinding('class.some-class') isSomeClass = true; 
} 

Plunker example

+0

最初の部分では、両方のhtmlファイルをindex.htmlに含める必要がありますか?あなたが望んでいないコンポーネントデコレータ自体でクラスプロパティを定義しています... CSSファイル(例えばon.cssとoff.css)ですべてのスタイルを定義したいので、ユーザーがクリックしてスタイルシートを変更したいと思います。 –

+0

わかりません「両方のhtmlファイル」の意味私たちはCSSについて正しいことを話していますか、あるいは別のテンプレートも必要ですか?このスタイルを外部ファイルに移動し、コースの代わりに 'styleUrls'を使用することもできますが、それらは同時にロードされます。 1つのスタイルファイルを持ち、それを入れておくと便利かもしれません。ファイルサイズが大きいほど、サーバーにファイルをフェッチする個々の要求よりも負荷が小さいと思います。 –

+1

実際には、これは私がスタイルシートを変更しなければならないユーザーに基づいて暗いライトスタイルCSSなどの2つのCSSファイルを維持するための私の要件です。私はあなたの大胆な例を見てきたので、私はそれが私の問題を解決すると思う。 –

0

私はngStyleディレクティブを活用します:

styleをUpdading
<h1 [ngStyle]="{'font-style': style, 'font-size': size, 'font-weight': weight}"> 
    Change style of this text! 
</h1> 
<div (click)="changeStyle()">Update style</div> 

を、(クリックイベントにリンクされている)メソッドからsize値は、あなたのスタイルを更新します。

export class SomeComponent { 
    style = 'normal'; 
    weight = 'normal'; 
    size = '20px'; 

    changeStyle($event: any) { 
    this.style = 'italic'; 
} 
+0

私は2つのスタイルシートを持っていて、ユーザーの入力に基づいて切り替える必要がありますスタイルシート全体...私はコンポーネント側で定義したくない... !! –

+0

私はメソッドを呼び出すことによってそれを更新することができますが、スタイルシートを切り替えていないことに完全に同意します。メソッドのスタイルを定義し、変更のために呼び出します。 –

関連する問題