Ngx-datatable行值更新后过滤数据消失并跳转首页问题求助
这个行为的核心原因在于ngx-datatable的状态管理机制与Firebase实时数据更新的交互方式,具体拆解如下:
ngx-datatable的状态依赖数据源引用
ngx-datatable的过滤、分页等状态(比如当前页码、过滤条件对应的结果集)是和你绑定的数据源数组实例强关联的。当你给数据源赋值一个全新的数组引用时,组件会认为这是一套完全新的数据,因此会自动重置所有内部状态(包括过滤条件、当前页码),回到初始状态。Firebase实时数据更新会生成新数组引用
在你的实现中,当Firebase实时数据库的数据发生变化(比如点击Edit Data修改行值),你订阅的Firebase数据回调(比如valueChanges())会返回一个新的数组对象(即使只是数组里某一项的值变化,Firebase通常也会返回整个数据集的新引用)。当你把这个新数组直接赋值给绑定ngx-datatable的数据源变量时,Angular的变更检测会捕捉到数据源引用的变化,触发ngx-datatable重新初始化,导致过滤状态和页码被清除。过滤后的数据集是组件内部派生的
当你在ngx-datatable中执行过滤操作时,组件内部会基于原始数据源生成一个过滤后的派生数据集,但这个派生状态是依赖原始数据源的引用存在的。一旦原始数据源的引用被替换,组件无法保留之前的过滤派生状态,只能重新基于新的数据源实例从头开始。
简单来说:你修改Firebase数据后,数据源的引用变了,ngx-datatable以为换了新数据,就把之前的过滤、分页都重置了。
内容的提问来源于stack exchange,提问作者Luca Brasi

