Angular 角度自定义排序网格列的剑道用户界面

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;

我在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;
    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();
}