javascript - 无法通过订阅更改我的文本颜色
问题描述
我想通过服务和订阅更改文本的颜色,但我似乎无法让它正常工作?
我正在使用 [ngClass] 动态设置对“isActive”有效的字符,但我不知道为什么我不能让它工作?
目前,只有第一个字母被更改。另外...我希望更改由 [ngClass] 更改的突出显示字母的颜色。
html
<div class="container">
<div class="keys" *ngFor="let item of dataKeys">
<div #text class="chars" *ngFor="let char of data[item]" [ngClass]="{'active': char.isActive}">
{{char.name}}
</div>
</div>
</div>
零件
@ViewChild('text') private text: ElementRef;
constructor(private service: SettingsService) {
}
ngOnInit() {
this.subscribeToColour();
}
subscribeToColour() {
this.service.getColour.subscribe(res => {
if (this.text) {
this.text.nativeElement.style.color = res;
}
});
}
get dataKeys() {
return Object.keys(this.data);
}
服务
export class SettingsService {
default = 'green'
colour = new BehaviorSubject<any>(this.default);
setColour(colour) {
this.colour.next(colour);
}
get getColour(): Observable<any> {
return this.colour;
}
}
解决方案
正如彼得所说,您捕获的“文本”视图子引用只是对您重复的第一个 div 的引用。
作为替代方案,您可以考虑将颜色添加到数据对象:
例如:{ "name": "a", "isActive": true, "color": "red", }
并在你的 html 文件中绑定到这个 - 你不应该自己操作 nativeElement 属性
然后,您将根据需要更新服务订阅者中数据对象中的属性
推荐阅读
- r - R ggplot 或其他:如何在同一个图上绘制一条最适合分组和配对数据的线?
- javascript - 如何使用 eslint 查找恶意 unicode?
- c - Eclipse CDT:我应该在哪里定义宏
- c++ - 如何使用 SetWindowsHookExA 和 LowLevelKeyboardProc 分配多个 LowLevel 热键
- java - 如何转义空对象引用?
- javascript - webapi如何执行settimeout javascript
- typescript - 如何在 XState 机器中执行操作 send('EVENT_NAME', {to:'something from context'})?
- angular8 - 新命令需要在项目之外运行
- python - coverage.py 是否也应该提供单元测试代码的覆盖率?
- android - Exoplayer 无法捕获错误 - 输入不以 #EXTM3U 标头开头