Angular Kendo自定义数据绑定指令调用NotifyDataChange后网格未更新问题
Angular Kendo自定义数据绑定指令调用NotifyDataChange后网格未更新问题
嘿,我明白你现在遇到的困扰了!先梳理下你当前的实现逻辑:你自己写了一个针对Kendo Grid的自定义数据绑定指令,这个指令支持传入一个服务方法,让rebind()去调用它。使用这个网格的组件需要负责把对应的方法传给指令,你的模板代码大概是这样的:
<kendo-grid [customDataBinding]="myData" [queryFn]="requeryGrid()"> </kendo-grid>
在组件内部,requeryGrid()是你定义的数据源查询方法,结合你遇到的“调用notifyDataChange后网格不更新”的问题,我帮你梳理几个最可能踩坑的点:
第一个坑:传递
queryFn时传成了方法执行结果而非方法引用
你现在模板里写的[queryFn]="requeryGrid()"会在组件初始化时直接执行一次requeryGrid,并把它的返回值传给指令,而不是方法本身!这样指令在rebind()时根本拿不到可调用的方法,自然没法触发数据更新。正确写法应该是去掉括号,传递方法引用:<kendo-grid [customDataBinding]="myData" [queryFn]="requeryGrid"> <!-- 这里去掉括号 --> </kendo-grid>第二个坑:数据源引用未更新,Angular变更检测没触发
即使你调用了notifyDataChange,如果myData还是原来的数组/对象引用(比如直接修改原数组的元素),Angular的变更检测可能感知不到变化。你需要在获取新数据后,生成一个新的引用,比如:// 组件内的requeryGrid方法示例 requeryGrid() { this.yourDataService.fetchData().subscribe(newData => { this.myData = [...newData]; // 用扩展运算符生成新数组 // 或者用Array.from(newData)、newData.slice()都可以 }); }第三个坑:
notifyDataChange的调用时机不对
在你的自定义指令里,要确保是在queryFn执行完成、数据源已经更新之后,再调用网格的notifyDataChange。比如指令里的rebind方法可以这么写:// 自定义指令内的rebind方法示例 rebind() { // 假设queryFn返回的是Observable const data$ = this.queryFn(); data$.subscribe(() => { // 等数据源更新完成后再通知网格 this.grid.notifyDataChange(); }); }
按照这几点调整后,应该就能解决网格不更新的问题啦!
备注:内容来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

