私はAngularのページ全体の背景色を変更しようとしています(フレームワークなしで作業する場合はbodyまたはhtmlタグを使用します)。そして、このためのベストプラクティスを見つけることができません。今後数年間アプリケーションを構築しているので、可能であればフレームワーク内に収めたいと思います。
これは、任意のコンポーネントから実行できます。例えば:
export class AppComponent implements AfterViewInit {
constructor(private elementRef: ElementRef){
}
ngAfterViewInit(){
this.elementRef.nativeElement.ownerDocument.body.style.backgroundColor = 'yourColor';
}
}
this.elementRef.nativeElement.ownerDocument
を使用すると、angular規則に違反することなくwindow.document
オブジェクトにアクセスできます。もちろん、window.document
を使用してdocument
オブジェクトに直接アクセスできますが、ElementRef
を介してアクセスした方が良いと思います。
Angular-cliを使用している場合。
グローバルスタイルファイルが存在する必要があります。
そこにあなたのスタイルを置くことができるはずです。 html { background-color: black; }
はページ全体に影響します。
一般的に、ElementRefを使用すると、アプリがXSS攻撃に対してより脆弱になる可能性があります。詳細については、 this official Angular doc を参照してください。
また、Andressonが示唆したように、styles.cssファイルにグローバルスタイルを設定しても、独自の Shadow DOMs を持つ複数のコンポーネントを使用している場合、問題が解決しない場合があります。
View Encapsulationを使用して、問題に対するより安全なソリューションを示します。
app.component.tsでView EncapsulationをNoneに設定します(インポートすることを忘れないでください)。
import {Component, ViewEncapsulation} from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
encapsulation: ViewEncapsulation.None
})
次に、app.component.cssファイルに移動して、背景色を追加します。
body {
background-color: green;
}
この変更はアプリにグローバルに影響します。 詳細はこちら 。
次の解決策は、同じ問題に直面しているときに出くわした別の選択肢です。さまざまなプラットフォームでアプリケーションをより適応させるには、Angularが提供する 'Renderer2'クラスを次のようなサービスとして使用できます。
エクスポートクラスAppComponent {
constructor(プライベートel:ElementRef、プライベートレンダラー:Renderer2){}
ngAfterViewInit(){
this.renderer.setStyle(this.el.nativeElement.ownerDocument.body、 'backgroundColor'、 'yourchoice color');
}
}
Renderer2とそのメソッドに関する詳細は、ここにあります: https://angular.io/api/core/Renderer2#description