我正在尝试更改Angular中整个页面的背景颜色(在没有框架的情况下使用body或html标记)。我无法找到最佳实践,如果可能的话,我希望它能在框架内,因为我将在未来几年内构建一个应用程序。
答案 0 :(得分:23)
如果您使用的是angular-cli 应该存在一个全局样式文件。
在那里,你应该能够把你的风格,例如html { background-color: black; }
影响整个页面。
答案 1 :(得分:18)
您可以从任何组件执行此操作。例如:
export class AppComponent implements AfterViewInit {
constructor(private elementRef: ElementRef){
}
ngAfterViewInit(){
this.elementRef.nativeElement.ownerDocument.body.style.backgroundColor = 'yourColor';
}
}
通过使用this.elementRef.nativeElement.ownerDocument
,您可以访问window.document
对象而不违反任何角度约定。当然,您可以使用document
直接访问window.document
对象,但我认为最好通过ElementRef
访问它。
答案 2 :(得分:13)
通常来说,使用ElementRef可能会使您的应用更容易受到XSS攻击。有关更多信息,请参见this official Angular doc。
此外,如Andresson所建议的那样,在styles.css文件中设置全局样式可能无法解决您的问题,如果您使用的是具有自己Shadow DOMs的多个组件。
使用视图封装,这是解决您问题的更安全的方法。
在 app.component.ts 中将“视图封装”设置为“无”(不要忘记导入):
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;
}
此更改将在全球范围内影响您的应用。 Read more about it here。
答案 3 :(得分:2)
不确定为什么不提及它,但是将其添加到全局css文件中可以很好地工作:
body { background-color: red !important; }
答案 4 :(得分:0)
以下解决方案是我遇到相同问题时遇到的另一种选择。为了使应用程序在不同平台上具有更好的适应性,我们可以使用Angular提供的Renderer2
类作为服务,如下所示:
export class AppComponent {
constructor(private el: ElementRef, private renderer:Renderer2){}
ngAfterViewInit(){
this.renderer.setStyle(this.el.nativeElement.ownerDocument.body,'backgroundColor', 'yourchoice color');
}
}
有关Renderer2及其方法的更多详细信息,请参见:Render2_Description