根据我的观察,这不是重复的帖子,找不到具有外部状态更改的任何内容。我已经在这个主题上搜索了几天或之后。
我正在做的是下面的事情。
我的UI上有DataTable和Map。数据表列出了地图上的数据点。
我可以在DataTable上进行选择和多选,这会突出显示数据表上的行,并与地图交互并绘制突出显示的数据点。我遇到的问题是,当我使用地图选择DataTable时,并没有反映出与地图上该数据点对应的所选行,直到我将鼠标悬停在DataTable上(假设在后台触发某种形式)刷新。我不必单击或在DataTable中执行任何操作,它只是自动触发自身,然后显示我在地图内选择的所有点。
html页面绑定到[selected]的变量已被正确调用并已设置其值,直到鼠标进入DataTable区域,它才反映行上的高亮显示。我无需单击或执行任何操作来触发它,只要鼠标进入该区域,它便会自行执行。
此外,我还尝试过手动设置表格的选定值,例如
this.tableRef.selected = this.newRowSelection;
所以我的问题是当我进行外部选择时,如何使数据表自动显示?
我不想删除表并重绘 DataTable,因为我认为它不会创建好的UX。
赞赏与此有关的所有输入。
================================================= =======
因此,在进行了更多测试和调试之后,我可以确认我确实将datatable.selected值设置为应选择的行的[]。
但是,再次将行不要突出显示,直到将鼠标悬停在数据表上。
有人对如何使数据表自动突出显示有任何建议吗?
================================================= =======
很难确定,没有可复制的示例,但是我认为这是因为您正在更新角度范围之外的属性,这可能是因为单击了未按角度方式绑定的地图。
尝试将所做的修改包装到setTimeout
中>
setTimeout(()=> this.tableRef.selected = this.newRowSelection);
或明确通知角度再次运行更改检测
import {ChangeDetectorRef} from '@angular/core'; constructor(private cdr: ChangeDetectorRef) {} //.... this.tableRef.selected = this.newRowSelection; this.cdr.detectChanges();
您也可以在角度区域内执行操作
import {NgZone} from '@angular/core';
constructor(private ngZone: NgZone) {}
//...
this.ngZone.run(() => this.newRowSelection);