sortering - Angular, TypeError: Kan ikke lese egenskapen 'sort' av undefined
Jeg prøver å lage en sorteringsfunksjon og pipe for en tabell ved å følge denne lenken, og her er plunkeren for det eksempelet. Fra eksempelet jeg følger, skal tabellhodet være klikkbart og utføre sort()-funksjonen. Pipen min heter prdSort. Jeg bruker også ngx-pagination, men jeg tror ikke det er hovedårsaken til denne feilen.
//part of service.ts
productList: AngularFireList < any > ;
//end
//component.ts
productList: Product[];
isDesc: boolean = false;
column: string = 'prdName';
records = this.productList
sort(property) {
this.isDesc = !this.isDesc; //change the direction
this.column = property;
let direction = this.isDesc ? 1 : -1;
};<!-- table header -->
<th (click)="sort('prdName')">Name</th>
<!--table row-->
<tr *ngFor="let product of productList | paginate: { itemsPerPage: 3, currentPage: p } | prdSort: {property: column, direction: direction} ">//pipe.ts
transform(records: any, args ? : any): any {
return records.sort(function(a, b) {
if (records !== undefined) {
if (a[args.property] < b[args.property]) {
return -1 * args.direction;
} else if (a[args.property] > b[args.property]) {
return 1 * args.direction;
} else {
return 0;
}
}
return records;
});
};Jeg har allerede inkludert pipe-filen i app.module.ts. Vennligst gi beskjed hvis flere kodesnutter er nødvendig.
Svar #1
Prøv å initialisere produktlisten din med en tom matrise:
// component.ts:
productList: Product[] = [];
For mer sikkerhet, for å forhindre å kalle array.prototype.sort på en variabel som er udefinert i stedet for et array, kan du legge til koden nedenfor i filteret ditt:
transform(records: any, args ? : any): any {
records = records || []; // set records to an empty array if undefined
return records.sort(function(a, b) { ... });
}
Svar #2
Som @Faly svarte dette nesten perfekt, men din bruk av pipe er ugyldig etter min gjetning.
Fra dette
<tr *ngFor="let product of productList | paginate: { itemsPerPage: 3, currentPage: p } | prdSort: {property: column, direction: direction} ">
Bytt til dette
<tr *ngFor="let product of productList | paginate: { itemsPerPage: 3, currentPage: p } | prdSort: column : direction ">
(Passerte argumenter endret.)
Også fra @Faly
transform(records: any, args ? : any): any {
records = records || []; // set records to an empty array if undefined
return records.sort(function(a, b) { ... });
}
Forklaring: Når du ser på feilen din ERROR TypeError: Cannot read property 'sort' of undefined at PrdSortPipe.transform prøver du å bruke sort-funksjonen på undefined på grunn av, antar jeg, feil overførte argumenter til pipe. Så pipen din får en undefined-verdi som sort-metoden ikke kan kjøres på. Se på dette svaret om flere argumenter i pipe.
