treeControl = new FlatTreeControl<any>(
node => node.level,
node => node.expandable
);
treeFlattener = new NzTreeFlattener(
this.transformer,
node => node.level,
node => node.expandable,
node => node.children
);
dataSource = new NzTreeFlatDataSource(this.treeControl, this.treeFlattener);
hasChild = (_: number, node: any): boolean => node.expandable;
ngOnChanges(changes: SimpleChanges) {
this.dataSource.setData(orderList.currentValue);}
updateTreeNode() {
this.orderList.forEach((item: any) => {
if (item.itemList) {
item.itemList.forEach((i: any) => {
i.key = item.key;
i.isItem = true;
i.isCheck = false;
i.partId = i.defaultPartId;
i.strengthId = i.defaultStrengthId;
i.defaultItemId = i.itemId;
});
}
item.children = item.itemList;
});
console.log('传入的orderList', this.orderList);
this.dataSource.setData([...this.orderList]);
console.log('dataSource', this.dataSource.getData());
console.log('dataNodes', this.treeControl.dataNodes);
this.cd.markForCheck();
}
我初始化树的时候,先将传入的orderList赋值给dataSource,然后我改变了这个orderList的时候,需要修改树视图的dataSource的值,和orderList同步数据,问题是dataSource的_data的值改变了,但treeControl.dataNodes的值还是初始化的值,怎么改变都无效,改怎么做
在Angular中使用NzTreeFlatDataSource
和FlatTreeControl
时,确保dataSource
和treeControl.dataNodes
同步的关键在于正确更新数据源并通知变更检测机制。从你提供的代码来看,你已经尝试在updateTreeNode
方法中更新dataSource
,但是可能缺少了某些步骤来确保treeControl
能够识别到这些变更。
以下是一些可能的解决方案和建议:
treeControl
和dataSource
的数据绑定正确:treeControl
和dataSource
是在组件的同一生命周期阶段被正确初始化和配置的。这通常发生在ngOnInit
生命周期钩子中。dataNodes
:treeControl.dataNodes
,因为这是一个内部管理的数组。你应该总是通过dataSource.setData()
来更新数据,这样treeControl
可以自动处理节点数据的更新。this.cd.markForCheck();
,这是一个好的开始。确保你正确注入了ChangeDetectorRef
并在组件的构造函数中进行了初始化。orderList
的引用变化:this.dataSource.setData([...this.orderList]);
时,你正在创建一个orderList
的浅拷贝。这通常足以触发dataSource
的更新,但如果orderList
中的对象引用没有改变(只是属性改变了),则可能需要更深入地处理。transformer
函数:NzTreeFlattener
使用了一个transformer
函数,但没有在你的代码示例中给出。确保这个transformer
函数能够正确地将原始数据转换为适合树控件的格式,并且在数据更新时能够反映这些变更。updateTreeNode
方法的开始和结束处添加日志,以确保该方法被正确调用,并且orderList
确实在调用前后有所变化。同时,检查dataSource.getData()
和treeControl.dataNodes
在更新后的状态。trackBy
功能:*ngFor
指令中使用trackBy
来优化DOM的更新。dataSource
:dataSource
,而不是仅仅更新其数据。但这通常不是推荐的做法,因为它可能会导致不必要的DOM操作。如果问题依旧存在,建议逐步检查每一步的执行情况,并考虑在更新数据时添加更多的日志输出来跟踪数据的变化。
问题内容: 当覆盖java.lang.Object的equals()函数时,javadocs建议, 通常,无论何时重写此方法,都必须重写hashCode方法,以维护hashCode方法的常规约定,该约定规定相等的对象必须具有相等的哈希码。 hashCode()方法必须为每个对象返回一个 唯一的整数 (当根据内存位置比较对象时,这很容易做到,只需返回对象的 唯一的整数 地址即可) 应该如何重写has
问题内容: 我正在考虑使用日常脚本来执行以下操作,以解决ES服务器上更新存在问题的任何情况(我还没有高可用性设置,即使如此,它仍然可能是在数据库和ES之间复制数据的情况下的良好做法)。在把这个脚本放在一起之前,我想我会检查一下是否要以正确的方式进行操作,以及是否应该使用任何库或技术。 该脚本将简单地从数据库中检索所有ID,并从ElasticSearch中检索所有ID,其中(当前时间的快照,因为它是
本文向大家介绍如何保证缓存与数据库双写时的数据一致性?相关面试题,主要包含被问及如何保证缓存与数据库双写时的数据一致性?时的应答技巧和注意事项,需要的朋友参考一下 合理设置缓存的过期时间。 新增、更改、删除数据库操作时同步更新 Redis,可以使用事物机制来保证数据的一致性。
面试题 如何保证缓存与数据库的双写一致性? 面试官心理分析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 面试题剖析 一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。 串行
我正在尝试修复与MySQL数据库的连接问题。几个小时后,我的服务器意外地关闭了与MySQL数据库的连接。 这是我的错误代码: 通用域名格式。mysql。jdbc。例外。jdbc4。CommunicationsException:从服务器成功接收到的最后一个数据包是37521865毫秒前。最后一个成功发送到服务器的数据包是37521865毫秒前。长于服务器配置的“等待超时”值。在应用程序中使用之前,
假设我当前所在的页面的URL为user/:id。现在,我从这一页导航到下一页:id/posts。 现在有一种方法,可以检查前面的URL是什么,即,。 下面是我的路线