2016-04-20 10 views
6

私はcomponentAとcomponentBの2つのコンポーネントを作成しています。 componentAはcomponentBをカプセル化します。どちらも 'p'タグを持っています。私のcomponentAでは、私は@Componentデコレータ内に[p{color:red}]スタイルを書いています。 componentAのpはredに変更されますが、componentBの色は黒のままです。Angular2のコンポーネントのスタイルはカプセル化された子コンポーネントで継承されません

私はそのバグを解決する必要があると思います。 (中または成分のブリードアウトのスタイルを防ぐ)

答えて

13

スタイルカプセル化は角度成分の主な特徴です。

あなたは

@Component({ 
    selector: 'component-b', 
    styles: [` 
    p { color: red; } 
    `] 
    ... 
    encapsulation: ViewEncapsulation.None 
}) 

またはあなたが最近導入(Angular2のみ)CSSを貫通影コンビネータ>>>

@Component({ 
    selector: 'component-b', 
    styles: [` 
    :host >>> p { color: red; } 
    `] 
    ... 
}) 
とコンポーネントの境界を横断するCSSセレクタを変更することができますしたいものを達成するためのさまざまなオプションがあります。

2番目のアプローチはデフォルトのカプセル化(ViewEncapsulation.Emulated)またはencapsulation: ViewEncapsulation.Noneで動作しますが、ここでは>>>は冗長です。 >>>encapsulation: ViewEncapsulation.Nativeを使用することはできません。実際には、>>>(またはそれに相当する/deep/)は、シャドーDOMでは非推奨です。

ヒント/deep/それはバグではありません>>>

+0

こんにちは、ありがとう。私はangular2を始めました。 「カプセル化:ViewEncpasulation.None」とその他のオプションについて少し詳しく教えてください。 –

+0

http://blog.thoughtram.io/angular/2015/06/29/shadow-dom-strategies-in-angular2.html、https://angular.io/docs/ts/latest/api/core/ViewEncapsulation -enum.html –

+1

https://egghead.io/lessons/angular-2-say-hello-world-to-angular-2?series=angular-2-fundamentalsにはViewEncpasulationに関する動画もあります – Roninio

4

よりSASSとのより良い動作するようです。

コンポーネントのスタイルは、通常、コンポーネントの独自のテンプレートにのみHTMLに適用されます - reference

あなたは先祖のコンポーネントに影響を与えるために親コンポーネントで定義されたスタイルをしたい場合は、私が使用使用します/deep/セレクタ(回答にGünterとして使用されているエイリアス>>>)が親コンポーネントにあり、すべての祖先コンポーネントを強制的にスタイルダウンさせます。 これは、すべてのビューの子およびコンテンツの子にスタイルを適用することに注意してください。

@Component({ 
    selector: 'component-a', 
    styles: [`/deep/ p { color: red; }`] 
}) 

Plunker

コンポーネントスタイルDEVガイドのSpecial Selectorsセクションも参照。

関連する問題