Angular material 如何使用自定义管道在angular中的“自动完成”下拉列表中对(asc顺序)数据(来自数据库)进行排序

Angular material 如何使用自定义管道在angular中的“自动完成”下拉列表中对(asc顺序)数据(来自数据库)进行排序,angular-material,ngfor,angularjs-orderby,mat-autocomplete,Angular Material,Ngfor,Angularjs Orderby,Mat Autocomplete,app.component.html {{option.name} 应用程序组件.ts 1. import { SortPipe } from "../../../pipes/sort.pipe"; 2. private sortPipe: SortPipe, 1. import { SortPipe } from '../../pipes/sort.pipe'; 2.@NgModule({ declarations: [ SortPipe ]

app.component.html

{{option.name}

应用程序组件.ts

1. import { SortPipe } from "../../../pipes/sort.pipe";
2. private sortPipe: SortPipe,
1. import { SortPipe } from '../../pipes/sort.pipe';
2.@NgModule({
  declarations: [
        SortPipe
  ], 
   providers: [SortPipe]
import { Injectable, Pipe, PipeTransform } from '@angular/core';
export type SortOrder = 'asc' | 'desc';

@Injectable()
@Pipe({
  name: 'sort',
})
export class SortPipe implements PipeTransform {
  transform(value: any, sortOrder: SortOrder | string = 'asc', sortKey?: string): any {
    sortOrder = sortOrder && (sortOrder.toLowerCase() as any);

    if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value;

    let numberArray = [];
    let stringArray = [];

    if (!sortKey) {
      numberArray = value.filter(item => typeof item === 'number').sort();
      stringArray = value.filter(item => typeof item === 'string').sort();
    } else {
      numberArray = value.filter(item => typeof item[sortKey] === 'number').sort((a, b) => a[sortKey] - b[sortKey]);
      stringArray = value
        .filter(item => typeof item[sortKey] === 'string')
        .sort((a, b) => {
          if (a[sortKey] < b[sortKey]) return -1;
          else if (a[sortKey] > b[sortKey]) return 1;
          else return 0;
        });
    }
    const sorted = numberArray.concat(stringArray);
    return sortOrder === 'asc' ? sorted : sorted.reverse();
  }
}
应用程序模块.ts

1. import { SortPipe } from "../../../pipes/sort.pipe";
2. private sortPipe: SortPipe,
1. import { SortPipe } from '../../pipes/sort.pipe';
2.@NgModule({
  declarations: [
        SortPipe
  ], 
   providers: [SortPipe]
import { Injectable, Pipe, PipeTransform } from '@angular/core';
export type SortOrder = 'asc' | 'desc';

@Injectable()
@Pipe({
  name: 'sort',
})
export class SortPipe implements PipeTransform {
  transform(value: any, sortOrder: SortOrder | string = 'asc', sortKey?: string): any {
    sortOrder = sortOrder && (sortOrder.toLowerCase() as any);

    if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value;

    let numberArray = [];
    let stringArray = [];

    if (!sortKey) {
      numberArray = value.filter(item => typeof item === 'number').sort();
      stringArray = value.filter(item => typeof item === 'string').sort();
    } else {
      numberArray = value.filter(item => typeof item[sortKey] === 'number').sort((a, b) => a[sortKey] - b[sortKey]);
      stringArray = value
        .filter(item => typeof item[sortKey] === 'string')
        .sort((a, b) => {
          if (a[sortKey] < b[sortKey]) return -1;
          else if (a[sortKey] > b[sortKey]) return 1;
          else return 0;
        });
    }
    const sorted = numberArray.concat(stringArray);
    return sortOrder === 'asc' ? sorted : sorted.reverse();
  }
}
定制管道

共享-->管道-->排序.pipe.ts

1. import { SortPipe } from "../../../pipes/sort.pipe";
2. private sortPipe: SortPipe,
1. import { SortPipe } from '../../pipes/sort.pipe';
2.@NgModule({
  declarations: [
        SortPipe
  ], 
   providers: [SortPipe]
import { Injectable, Pipe, PipeTransform } from '@angular/core';
export type SortOrder = 'asc' | 'desc';

@Injectable()
@Pipe({
  name: 'sort',
})
export class SortPipe implements PipeTransform {
  transform(value: any, sortOrder: SortOrder | string = 'asc', sortKey?: string): any {
    sortOrder = sortOrder && (sortOrder.toLowerCase() as any);

    if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value;

    let numberArray = [];
    let stringArray = [];

    if (!sortKey) {
      numberArray = value.filter(item => typeof item === 'number').sort();
      stringArray = value.filter(item => typeof item === 'string').sort();
    } else {
      numberArray = value.filter(item => typeof item[sortKey] === 'number').sort((a, b) => a[sortKey] - b[sortKey]);
      stringArray = value
        .filter(item => typeof item[sortKey] === 'string')
        .sort((a, b) => {
          if (a[sortKey] < b[sortKey]) return -1;
          else if (a[sortKey] > b[sortKey]) return 1;
          else return 0;
        });
    }
    const sorted = numberArray.concat(stringArray);
    return sortOrder === 'asc' ? sorted : sorted.reverse();
  }
}
从'@angular/core'导入{Injectable,Pipe,PipeTransform};
导出类型排序器='asc'|'desc';
@可注射()
@烟斗({
名称:'排序',
})
导出类SortPipe实现PipeTransform{
转换(值:any,sortOrder:sortOrder | string='asc',sortKey?:string):any{
sortOrder=sortOrder&(sortOrder.toLowerCase()如有);
if(!value | |(sortOrder!='asc'&&sortOrder!=='desc'))返回值;
设numberArray=[];
设stringArray=[];
if(!sortKey){
numberArray=value.filter(item=>typeof item=='number').sort();
stringArray=value.filter(item=>typeof item==='string').sort();
}否则{
numberArray=value.filter(item=>typeof item[sortKey]==“number”).sort((a,b)=>a[sortKey]-b[sortKey]);
stringArray=值
.filter(项=>typeof项[sortKey]==“string”)
.排序((a,b)=>{
if(a[sortKey]b[sortKey])返回1;
否则返回0;
});
}
const sorted=numberArray.concat(字符串数组);
return sortOrder=='asc'?排序:sorted.reverse();
}
}

问题:它不按升序显示。有什么我没有输入的吗?

请为具有方向的
排序管道提供适当的参数,并在app.component.html中为其应用排序的字段名,如下所示:

<mat-option *ngFor="let option of filteredOptions| async | sort: 'asc':'name'" [value]="option"> {{option.name}}
{{option.name}
请参考以下示例: