我正在尝试创建一个管道,用于对自定义类型的数组进行排序。
// custom-object.ts
export class CustomObject {
constructor(
public someString: string,
public someNumber: number
) {}
}
我在HTML中的代码为:
// custom-object-form.component.ts
<div class="form-group">
<label for="cricos_course_code">Object: </label>
<select class="form-control" required [(ngModel)]="model.someString">
<option *ngFor="#object of (customObjects | sortArrayOfCustomObjects)" [value]="object.someString">{{object.someString}}</option>
</select>
</div>
接下来是管道的代码:
// sort-custom-object.pipe.ts
import {Pipe, PipeTransform} from 'angular2/core';
import {CustomObject} from '../custom-object';
@Pipe({name: 'sortArrayOfCustomObjects'})
export class SortArrayOfCustomObjectsPipe implements PipeTransform {
transform(arr:Array<CustomObject>): any {
return arr.sort((a, b) => {
if (a.someString > b.someString) {
return 1;
}
if (a.someString < b.someString) {
return -1;
}
// a must be equal to b
return 0;
});
}
}
现在我在控制台中收到一个错误信息:
EXCEPTION: TypeError: Cannot read property 'sort' of undefined in [(customObjects | sortArrayOfCustomObjects) in FormComponent@7:24]
args: Array<string | number>
? - SnareChopsArray<CustomObject.someString | CustomObject.someNumber>
的问题在于它们是属性而不是类型。CustomObject.someString
的类型是string
。因此,您不能使用CustomObject.someString
作为类型。您能否提供更多关于您需求的信息? - SnareChopsp1:string,p2:number
等。在我的表单中,我想要有两个选择字段,按字母顺序显示p1列表和按降序显示p2列表。我认为我可以使用管道,例如*ngFor="item of items | sortItems"
。 - Allan Chau