2
我實現了一個order by管道,在DOM加載時工作正常。但是,當我向列表中添加新項目時,我的管道未被激活,並且已添加到列表中的新項目不是訂單 - 而是添加到列表中的最後一個位置。angular 2向列表中添加新項目時,自定義管道不重新排序列表
管:
import { PipeTransform, Pipe } from '@angular/core';
import { ITeam } from './team';
@Pipe({
name: "LeagueFilter"
})
export class LeagueFilterPipe implements PipeTransform {
transform(value: any[], filterBy: string): any[] {
filterBy = filterBy ? filterBy.toLocaleLowerCase() : null
for (let i = 0; i < value.length - 1; i++) {
for (let j = 0; j < value.length - 1; j++) {
if (value[j][filterBy] < value[j + 1][filterBy]) {
let temp = value[j]
value[j] = value[j + 1]
value[j + 1] = temp
}
}
}
return value;
}
}
在HTML:
<div class="container">
<div class="row">
<div class="col-sm-offset-1 col-sm-4">
<h2>
{{leagueTable}}
</h2>
<table class="table table-responsive">
<thead>
<tr>
<th>#</th>
<th>Team</th>
<th>Points</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let team of teams | LeagueFilter:'points'; let i = index">
<td>{{i+1}}</td>
<td>{{team.name}}</td>
<td>{{team.points}}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row">
<fieldset class="col-sm-offset-1 col-lg-3">
<legend>Add Team</legend>
<label for="name">Name </label>
<input type="text" name="" value="" [(ngModel)] = "newTeam.name" />
<br/>
<label for="name">Points</label>
<input type="text" name="" value="" [(ngModel)] = "newTeam.points" />
<button type="submit" (click)="addTeam()">Add</button>
</fieldset>
</div>
</div>
組分:
import { Component } from '@angular/core';
import { ITeam } from './team';
@Component({
selector: 'league-list',
moduleId:module.id,
templateUrl: 'league-list.component.html',
styleUrls: ['league-list.component.css']
})
export class LeagueListComponent {
leagueTable: string = "La Liga"
teams: ITeam[] = [
{ name: "Barcelona", points: 84 },
{ name: "Real Madrid", points: 85 },
{ name: "Valencia", points: 78 },
{ name: "Sevilla", points: 80 },
{ name: "Villareal", points: 62 },
]
newTeam:ITeam = { name:"", points:null };
addTeam():void{
this.teams.push(this.newTeam)
}
}