Angular 角度自定义排序网格列的剑道用户界面
我在Kendo网格(用于Jquery的UI)中有以下专栏,其中有一种基于客户需求的特殊排序方法Angular 角度自定义排序网格列的剑道用户界面,angular,typescript,kendo-ui,kendo-ui-angular2,Angular,Typescript,Kendo Ui,Kendo Ui Angular2,我在Kendo网格(用于Jquery的UI)中有以下专栏,其中有一种基于客户需求的特殊排序方法 field: "daysLeft", title: "Accessible", width: 130, sortable: { compare: function (a, b, descending) { if (a.daysLeft == 'Not started') return 1; if (b.daysLeft == 'Not started') return -1;
field: "daysLeft",
title: "Accessible",
width: 130,
sortable: {
compare: function (a, b, descending) {
if (a.daysLeft == 'Not started') return 1;
if (b.daysLeft == 'Not started') return -1;
if (a.end < b.end) return -1;
if (a.end > b.end) return +1;
return 0;
}
}
有可能在剑道UI中为Angular实现这一点吗?因为这显然目前不可用,我为我的特定问题编写了一个临时解决方案。如果可能对其他人有所帮助,请将其张贴在此处 在我的表格中,我添加了:
(sortChange)="sortChange($event)"
我的sortChange函数如下所示:
public sortChange(sort: SortDescriptor[]): void {
sort.map((item) =>
{
if (item.field == "daysLeft")
{
if(item.dir === undefined) this.view.data === this.items;
var data = this.view.data.sort((a, b) => {
var aend = parseInt(a.end.substr(6));
var bend = parseInt(b.end.substr(6));
if (a.daysLeft == 'Not started') return +1;
if (b.daysLeft == 'Not started') return -1;
if (aend < bend) return -1;
if (aend > bend) return +1;
return 0;
});
if(item.dir === "desc") {
data = data.reverse();
}
this.view.data = data;
}
});
}
public排序更改(排序:SortDescriptor[]):void{
sort.map((项目)=>
{
如果(item.field==“daysLeft”)
{
如果(item.dir==未定义)this.view.data==this.items;
var data=this.view.data.sort((a,b)=>{
var aend=parseInt(a.end.substr(6));
var bend=parseInt(b.end.substr(6));
如果(a.daysLeft==“未启动”),则返回+1;
如果(b.daysLeft==“未启动”),则返回-1;
如果(aend<折弯)返回-1;
如果(aend>折弯)返回+1;
返回0;
});
如果(item.dir==“desc”){
data=data.reverse();
}
this.view.data=数据;
}
});
}
this.view是我的GridDataResult对象h3li0s答案帮助了我很多,它需要一些调整,比如:
public sortChange(sort: SortDescriptor[]): void {
sort.map((item) =>
{
if (item.field == "daysLeft")
{
if (item.dir === undefined) {
this.view.data = this.items;
} else {
var data = this.view.data.sort((a, b) => {
var aend = parseInt(a.end.substr(6));
var bend = parseInt(b.end.substr(6));
if (a.daysLeft == 'Not started') return +1;
if (b.daysLeft == 'Not started') return -1;
if (aend < bend) return -1;
if (aend > bend) return +1;
return 0;
});
if (item.dir === "desc") {
data = data.reverse();
}
this.view.data = data;
this.sort["dir"] = item.dir;
} else {
this.sort = sort;
this.loadData();
}
});
}
public排序更改(排序:SortDescriptor[]):void{
sort.map((项目)=>
{
如果(item.field==“daysLeft”)
{
如果(item.dir==未定义){
this.view.data=this.items;
}否则{
var data=this.view.data.sort((a,b)=>{
var aend=parseInt(a.end.substr(6));
var bend=parseInt(b.end.substr(6));
如果(a.daysLeft==“未启动”),则返回+1;
如果(b.daysLeft==“未启动”),则返回-1;
如果(aend<折弯)返回-1;
如果(aend>折弯)返回+1;
返回0;
});
如果(item.dir==“desc”){
data=data.reverse();
}
this.view.data=数据;
this.sort[“dir”]=item.dir;
}否则{
this.sort=排序;
这是loadData();
}
});
}
别忘了香蕉装在一个盒子里,用于存储数据,并在html中进行排序,如:
[(排序)]=“排序”添加排序更改,如下所示
(sortChange)="sortChange($event)"
并在下面的列表中添加需要先为desc而不是升序的列
public resortColumn:any[] =['UnitPrice'];
定义排序更改函数如下
public sortChange(sort: SortDescriptor[]): void {
if(this.resortColumn.indexOf(sort[0].field) != -1 )
{
if(sort[0].dir == "desc")
{
sort[0].dir = undefined;
}
else if(sort[0].dir == "asc")
{
sort[0].dir = "desc";
}
else if(sort[0].dir == undefined)
{
sort[0].dir = "asc";
}
}
this.sort = sort;
this.loadProducts();
}
[链接]目前无法提供自定义的
比较功能。但是,在中已有一张票,您可以投票。
public resortColumn:any[] =['UnitPrice'];
public sortChange(sort: SortDescriptor[]): void {
if(this.resortColumn.indexOf(sort[0].field) != -1 )
{
if(sort[0].dir == "desc")
{
sort[0].dir = undefined;
}
else if(sort[0].dir == "asc")
{
sort[0].dir = "desc";
}
else if(sort[0].dir == undefined)
{
sort[0].dir = "asc";
}
}
this.sort = sort;
this.loadProducts();
}