2017-03-28 13 views
1

My Angular 2 Dartアプリケーションには、多くのネストされたコンポーネントがあります。私のコンポーネントの特定のプロパティがtrueに設定されている場合、ポップアップが表示されます。角2ダーツ:内部コンポーネントからボディクラスを追加するには?

このポップアップが表示された場合は、ドキュメント本体にクラスを追加します。

擬似コードの例:

<html> 
<head> 
</head> 
<body class=""> 
<app-component> 
<home-component> <!-- with routers --> 
<inner-component> 
<popup-component> 
// if I am active I want to add a body class 
</popup-component> 
</inner-component> 
</home-component> 
</app-component> 
</body> 
</html> 

単純な理由は:ポップアップ・コンポーネントが表示されている場合、私は身体のスクロール(overflow-x:hidden;)を無効にしたいです。プロパティbool show_popuppopup_component.dart)がtrueに設定されている場合、ポップアップコンポーネントが表示されます。 CSSで残念ながら

- 私の知る限りでは - この(Is there a CSS parent selector?)を確認するために何のセレクタが存在しない - そう、私はあるmain.cssファイルまたは類似した何かに

body:has(.my_popup) 

のようなものを言うでしょう。

希望する結果を得るにはどうすればよいですか?

答えて

2

2通りあります。

あなたはそれが

selector: 'body' 

または

document.querySelector('body').classes.add('someClass'); 

を持っている場合は、セレクタマッチングAに応じて、コンポーネントのスタイルを:host-context(...)を使用することができますルートコンポーネントに

@HostBinding('class.someclass') bool isSomeClass = true; 

を使用することができます親

:host-context(body.someClass) { 
    background-color: red; 
} 

要素がclass="someClass"の場合、背景色は赤になります。

関連する問題