Angular material 如何使用自定义管道在angular中的“自动完成”下拉列表中对(asc顺序)数据(来自数据库)进行排序
app.component.html {{option.name}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 ]
应用程序组件.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}
请参考以下示例: