Вы можете попробовать
body {
/* body styles here */
}
, но стили в компонентах не должны применяться к элементам вне себя.
Другой способ - использовать body
в качестве селектора в вашем основном компоненте и использовать привязку хоста для установки/удаления класса CSS в теле, чтобы добавить CSS в ваш индекс index.html.
@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
к истинным (usind некоторые привязки к службе, класс добавляется к телу.
Если вы не хотите, чтобы добавить 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');
Это только мое личное мнение, но почему бы вам просто не добавить класс, который был включен в тело, или что-то в этом роде, и добавить стили CSS, специфичные для этого класса, переопределить обычные, это кажется более каскадным, чем переопределение стили внутри каждого компонента. – Langley