Angular - 去抖清晰 vm-ware datagrid clrDgRefresh
Angular - debounce clarity vm-ware datagrid clrDgRefresh
我需要一种方法来消除由 clarity datagrid 发出的事件,以便我仅在用户完成输入后才从后端获取数据。我在 angular 6 应用程序中使用网格并将事件绑定到我的函数。我的设置如下,
<clr-datagrid (clrDgRefresh)="fetchData($event)"></clr-datagrid>
fetchData(state) {
// Fetch data from back end
}
如何消除事件的抖动,使其不会在每次键入时触发我的 fetchData 函数?我没有任何数据网格过滤器输入的句柄,我也不知道会有多少输入。我所拥有的只是一个事件,当任何一个网格过滤器输入上有一个键时,该事件就会被触发。
您可以使用 rxjs 运算符对应用程序端的事件进行去抖动 debounceTime
- 文档:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-debounceTime
- 示例:https://www.learnrxjs.io/operators/filtering/debouncetime.html
设置一个充当数据网格状态流的主题
debouncer = new Subject<any>();
将状态传递给去抖器:
refresh(state: ClrDatagridStateInterface) {
this.debouncer.next(state);
}
订阅 debouncer 并使用 debouceTime
this.debouncer.asObservable().pipe(
debounceTime(2000)
).subscribe(state => {
this.loading = true;
const filters: { [prop: string]: any[] } = {};
if (state.filters) {
for (const filter of state.filters) {
const { property, value } = <{ property: string; value: string }>filter;
filters[property] = [value];
}
}
this.inventory
.filter(filters)
.sort(<{ by: string; reverse: boolean }>state.sort)
.fetch(state.page.from, state.page.size)
.then((result: FetchResult) => {
this.users = result.users;
this.total = result.length;
this.loading = false;
});
})
这是一个快速的 POC,因此显然它也可以为数据网格状态接口键入或以其他方式进行改进(例如更多 rxjs 运算符来处理其他用例)。除此之外,它应该让您了解该应用程序如何消除数据网格事件。
这是 stackblitz 上的工作 POC。
我需要一种方法来消除由 clarity datagrid 发出的事件,以便我仅在用户完成输入后才从后端获取数据。我在 angular 6 应用程序中使用网格并将事件绑定到我的函数。我的设置如下,
<clr-datagrid (clrDgRefresh)="fetchData($event)"></clr-datagrid>
fetchData(state) {
// Fetch data from back end
}
如何消除事件的抖动,使其不会在每次键入时触发我的 fetchData 函数?我没有任何数据网格过滤器输入的句柄,我也不知道会有多少输入。我所拥有的只是一个事件,当任何一个网格过滤器输入上有一个键时,该事件就会被触发。
您可以使用 rxjs 运算符对应用程序端的事件进行去抖动 debounceTime
- 文档:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-debounceTime
- 示例:https://www.learnrxjs.io/operators/filtering/debouncetime.html
设置一个充当数据网格状态流的主题
debouncer = new Subject<any>();
将状态传递给去抖器:
refresh(state: ClrDatagridStateInterface) {
this.debouncer.next(state);
}
订阅 debouncer 并使用 debouceTime
this.debouncer.asObservable().pipe(
debounceTime(2000)
).subscribe(state => {
this.loading = true;
const filters: { [prop: string]: any[] } = {};
if (state.filters) {
for (const filter of state.filters) {
const { property, value } = <{ property: string; value: string }>filter;
filters[property] = [value];
}
}
this.inventory
.filter(filters)
.sort(<{ by: string; reverse: boolean }>state.sort)
.fetch(state.page.from, state.page.size)
.then((result: FetchResult) => {
this.users = result.users;
this.total = result.length;
this.loading = false;
});
})
这是一个快速的 POC,因此显然它也可以为数据网格状态接口键入或以其他方式进行改进(例如更多 rxjs 运算符来处理其他用例)。除此之外,它应该让您了解该应用程序如何消除数据网格事件。
这是 stackblitz 上的工作 POC。