你可以试试
body {
/* body styles here */
}
但是组件中的样式不应该应用于它们自身之外的元素。
另一种方法是在主组件中使用body 作为选择器,并使用主机绑定设置/删除正文上的 CSS 类,以使添加到 index.html 的 CSS 匹配。
@Component({
selector: "body",
host: {
"[class.some-class]":"someClass"
},
})
export class AppComponent {
constructor(private loginService: LoginService) {
loginService.isLoggedInChanged.subscribe((value) => {
this.someClass = value;
});
}
someClass: bool = false;
}
当您将 someclass 设置为 true 时(对服务使用一些绑定,该类被添加到正文中。
如果不想全局添加 CSS,也可以直接绑定到样式属性
@Component({
selector: "body",
host: {
"[style.background-image]":"bodyBackgroundImage()"
},
})
export class AppComponent {
bool isLoggedIn = false;
constructor(private loginService: LoginService) {
loginService.isLoggedInChanged.subscribe((value) => {
this.isLoggedIn = value;
});
}
function bodyBackgroundImage() {
return this.isLoggedIn ? 'url("gradient_bg.png")': 'none';
}
}
更新
DomAdapter 不见了。 Renderer2 应该提供类似的功能。
罢工>
直接从登录组件设置<body> 样式的方法是使用DomAdapter(另请参阅https://github.com/angular/angular/issues/4942)
System.import('angular2/src/platform/browser/browser_adapter').then(function(browser_adapter) {
browser_adapter.BrowserDomAdapter.makeCurrent();
})
...
_dom: DomAdapter = new BrowserDomAdapter();
_dom.setStyle(_dom.query('body'), 'padding', '50px');