angular - 角度变化检测,在视图更新后根据 svg 对象几何属性更新视图的正确方法
问题描述
我不确定在 Angular 中是否有正确的方法来做到这一点......
我想做的是与文本对象重叠管理有关,简而言之:
- 从后端获取带有日期和文本描述的对象列表。
- 这些对象应显示在 SVG 时间线上,水平位置基于日期。
- 更新视图后,我想
top
根据 width 属性在每个文本对象上设置一个属性,以检测两个对象是否重叠。
我现在这样做的方式:
在 中ngAfterViewChecked
,我正在检查this.svgObj.nativeElement.children['textObjId'].textLength.baseVal.value
. 我正在使用这个宽度属性来确定两个文本对象是否重叠。
我的问题:
显然这会引发 aExpressionChangedAfterItHasBeenCheckedError
因为我在检查视图后更改顶部属性...
有没有其他“角度方式”来实现我想要做的事情?
解决方案
我发现了我的错误并在这里分享以防万一。
我的问题:我根据绘制后的 SVG 元素的尺寸在对象上设置属性。然后将该计算属性绑定到我的模板中我的 SVG 元素的一些定位属性。那是引发 ExpressionChangedAfterItHasBeenCheckedError。
解决方案:通过从那里访问元素,直接从 ngAfterViewChecked 方法设置 SVG 位置属性。类似的东西:
export class SampleComponent implements AfterViewChecked {
@ViewChild('sampleSVG') sampleSVG: ElementRef;
ngAfterViewChecked(): void {
this.sampleSVG.nativeElement.children['element-id-123'].y.baseVal.value = 12345;
}
}
推荐阅读
- sql - 如果在 group by 中使用子查询会出错:无法对包含聚合或子查询的表达式执行聚合函数
- c++ - 为什么线程中缓冲区的更改不会反映在 mainThread 上的缓冲区中?
- azure - Linux 上的 Azure 应用服务不显示 Web 服务器日志
- swiftui - SwiftUI:如何使用 UserDefaults 持久化 @Published 变量?
- python - Tox 失败,因为 setup.py 找不到 requirements.txt
- javascript - Reactjs:使用辅助类和函数从 API 获取数据
- sql - 如何找到在任何一年下订单然后一年后没有下订单的用户
- reactjs - 使用反应将类别添加到新任务
- asp.net - 我如何使用带有剃刀的属性列表来完成 crud
- json - 从匹配特定键的 JSON 中删除所有值