Angular2 DataQuery ToDataString的KendoUI未在querystring中生成$filter
Angular2的for KendoUI提到,toODataString方法将提供的状态对象转换为oData v4兼容的字符串 定义了所述状态对象的结构 我已经为Angular2网格设置了一个KendoUI,它具有数据绑定和服务器端分页功能,如前所述,运行良好 因此,现在我想向该状态添加一个过滤器对象,并使用以下代码执行此操作:Angular2 DataQuery ToDataString的KendoUI未在querystring中生成$filter,angular,kendo-ui-angular2,Angular,Kendo Ui Angular2,Angular2的for KendoUI提到,toODataString方法将提供的状态对象转换为oData v4兼容的字符串 定义了所述状态对象的结构 我已经为Angular2网格设置了一个KendoUI,它具有数据绑定和服务器端分页功能,如前所述,运行良好 因此,现在我想向该状态添加一个过滤器对象,并使用以下代码执行此操作: private filter: CompositeFilterDescriptor; public applyFilters(): void { this.f
private filter: CompositeFilterDescriptor;
public applyFilters(): void {
this.filter = {
logic: "and",
filters: []
};
this.skip = 0;
this.sort = [];
if (this.customerNameFilter) {
let fd: FilterDescriptor = {
field: "name",
operator: "contains",
value: this.customerNameFilter,
ignoreCase: true
}
this.filter.filters.push(fd);
}
this.service.query({ skip: this.skip, take: this.pageSize, filter: this.filter });
}
然后,service.query方法调用toODataString方法,并返回以下querystring(请注意双符号and,好像它试图插入计算结果为null的内容):
$skip=0&$top=15&&$count=true
下面是调试器的屏幕截图,显示了传递给toODataString方法的filterDescriptor实例的结构。请告诉我我做错了什么
结果表明,toODataString方法的当前beta版不支持它。我查看了它的源代码,发现没有处理传递给它的状态的filter属性 因此,我使用自己的filterSerializer附加到querystring:
private fetch(tableName: string, state: any, filter: CompositeFilterDescriptor): Observable<GridDataResult> {
const queryStr = `${toODataString(state) + this.serializeFilter(filter)}&$count=true`;
return this.http
.get(`${this.BASE_URL}${tableName}?${queryStr}`)
.map(response => response.json())
.map(response => (<GridDataResult>{
data: response.value,
total: parseInt(response["@odata.count"], 10)
}));
}
private serializeFilter(filter: CompositeFilterDescriptor): string {
if (filter === null)
return "";
var filterString = "&$filter=";
var filters = filter.filters.map(function (fd: FilterDescriptor) {
switch (fd.operator) {
case "contains":
return "contains(" + fd.field + ", '" + fd.value + "')";
case "eq":
return fd.field + " eq '" + fd.value + "'";
}
})
.join(" " + filter.logic + " ");
filterString += filters;
return filterString;
}
private fetch(tableName:string,state:any,filter:CompositeFilterDescriptor):可观察{
const queryStr=`${toODataString(state)+this.serializeFilter(filter)}&$count=true`;
返回此文件。http
.get(`this.BASE\u URL}${tableName}?${queryStr}`)
.map(response=>response.json())
.map(响应=>({
数据:response.value,
总计:parseInt(响应[@odata.count],10)
}));
}
私有序列化筛选器(筛选器:CompositeFilterDescriptor):字符串{
如果(筛选器===null)
返回“”;
var filterString=“&$filter=”;
var filters=filter.filters.map(函数(fd:FilterDescriptor){
开关(fd.操作员){
案例“包含”:
return“contains”(“+fd.field+”,“+fd.value+”)”;
案例“eq”:
返回fd.field+“eq'”+fd.value+“'”;
}
})
.join(“+filter.logic+”);
过滤器字符串+=过滤器;
返回过滤器串;
}