2 回答
TA贡献1796条经验 获得超7个赞
改变封装很少是一件好事。我将创建一个状态服务来更改组件的类和样式。
它应该看起来像这样
服务
import { Injectable } from '@angular/core';
@Injectable()
export class StyleService {
private className: Subject<string> = new Subject<string>();
public className$: Observable<string> = this.className.asObservable();
set(className: string): any {
this.className.next(className);
}
}
为了聆听变化
...
private sub: Subscription;
...
this.sub = this.styleService.className$
.subscribe(class => {
// do what you need to do
})
...
ngOnDestroy() {
// so you dont have memory leaks
this.sub.unsubscribe();
}
当您想更改类时,您只需调用 set 函数即可。唯一缺少的是在主样式文件中声明类。
如果您需要有一个 className 初始值,您可以使用BehaviorSubject,如下所示:
private class: BehaviorSubject<string> = new BehaviorSubject<string>('className');
TA贡献1878条经验 获得超4个赞
我自己发现了这个问题
感谢所有帮助过我的人。
问题是无法在组件 css 中编辑 html 和 body html 标签。正确的方法是删除 ViewEncapsultation 并将以下代码行添加到构造函数中。
document.body.style.backgroundImage = 'url(\'../../../assets/images/background.jpg\')';
document.body.style.backgroundSize = 'cover';
document.body.style.backgroundRepeat = 'no-repeat';
document.body.style.height = '100%';
这是您在每个组件中设置 html 和 body 标签样式的方法。如果您需要设计整个背景的样式,这也适用。
- 2 回答
- 0 关注
- 85 浏览
添加回答
举报