我正在通过分配 style.background-color 属性将 div 的背景颜色设置为动态更新,如下所示。
<div [style.background-color]="cellColor">
<span>{{ cellColor }}</span>
</div>
在它的打字稿文件中,我分配了一个成功设置的默认颜色。稍后,我通过订阅组件文件的 ngOnInit() 生命周期内的主题来更改属性“cellColor”的值,如下所示。
在服务定义中。
@Injectable()
export class StyleService {
editClicked = new Subject();
constructor() { }
}
从另一个组件中,我正在为这样的“cellColor”属性推送新值。
this.styleService.editClicked.next('white');
然后我像这样从组件的 ts 文件订阅主题。
ngOnInit() {
this.styleService.editClicked.subscribe(
(color : string) => {
this.cellColor = color;
console.log(this.cellColor);
}
)
}
属性已成功更新,但视图未更新。如上所示,我已经使用 [] 括号绑定了我的 div 的样式属性,那么为什么视图不会更新?我在这里错过了什么吗?
但是,对于同一个示例,如果我使用 Observable 进行订阅,则属性会更改并且视图也会更新。
ngOnInit() {
Observable.of(true)
.delay(2000)
.subscribe((success) => {
if(success){
console.log('Pretend loading: success!');
this.cellColor = 'white';
this.cdr.markForCheck();
}
});
}
为什么订阅 Observable 而不是 Subject 时它会起作用?