Angular 2的ngFor——使用索引的反向输出顺序
Angular 2 ngFor - reverse order of output using the index
尝试学习Angular 2中的过滤和排序。我似乎找不到任何像样的资源,我被困在如何使用索引以倒序排序ngFor输出。我已经写了下面的管道,它一直给我错误,数组切片不是一个函数。
@Pipe({
name: 'reverse'
})
export class ReversePipe implements PipeTransform {
transform(arr) {
var copy = arr.slice();
return copy.reverse();
}
}
和我的ngfor是这样的
<div class="table-row generic" *ngFor="let advert of activeAdverts | reverse let i = index;" [attr.data-index]="i" (click)="viewAd(advert.title)">
<div class="table-cell white-text">{{ i+1 }}</div>
<div class="table-cell white-text">{{advert.title}}</div>
<div class="table-cell green-text">{{advert.advert}}</div>
</div>
我还要加上.slice()
*ngFor="let advert of activeAdverts.slice().reverse() let i = index;"
对于这些常见的用例,我建议你使用ng-pipes模块中的反向管道:https://github.com/danrevah/ng-pipes reverse-1
来自DOCS:
控制器
this.items = [1, 2, 3];
<li *ngFor="let item of items | reverse"> <!-- Array: [3, 2, 1] -->
我认为@BhaskerYadav给出了最好的答案。改变原始数组是一个坏主意,他/她的想法没有副作用,性能或其他方面。IMHO,它只需要稍微改进,因为所有的索引解引用在规模上是不可读的。
<tr *ngFor="let _ of activeAdverts; let i = index">
<ng-container *ngIf="activeAdverts[activeAdverts.length-i-1] as advert">
<td>{{advert.p}}</td>
<td>{{advert.q}}</td>
...
</ng-container>
</tr>
使用下面的方法你可以反转输出,但是原始数组不会被修改,
<tr *ngFor="let advert of activeAdverts; let i = index" >
<td>{{activeAdverts[activeAdverts.length-i-1]}}</td>
</tr>
使用
*ngFor="let item of items.slice().reverse()"
我能使它工作的最简单的方法是使用activeAdverts.reverse()
。在你的例子中:
<div class="table-row generic" *ngFor="let advert of activeAdverts.reverse() let i = index;" [attr.data-index]="i" (click)="viewAd(advert.title)">
<div class="table-cell white-text">{{ i+1 }}</div>
<div class="table-cell white-text">{{advert.title}}</div>
<div class="table-cell green-text">{{advert.advert}}</div>
</div>
我找到了这个答案。
Lodash reverse for me
import { reverse} from "lodash";
this.cloudMessages = reverse(this.cloudMessages)
在ngFor上使用Angular默认的Reverse方法
<div class="table-row generic" *ngFor="*ngFor="let advert of activeAdverts.slice().reverse() let i = index;" [attr.data-index]="i" (click)="viewAd(advert.title)">
<div class="table-cell white-text">{{ i+1 }}</div>
<div class="table-cell white-text">{{advert.title}}</div>
<div class="table-cell green-text">{{advert.advert}}</div>
</div>
相关文章:
- 以不同的顺序输出数据
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 为什么setTimeout输出不按顺序添加的数字
- 用于提示输入和输出的JavaScript按字母顺序排序
- JavaScript 循环输出顺序不正确 - 如何解决这个问题
- 如何输出反向顺序?AJAX 文件 > DIV.
- 以字母顺序输出数组
- 使用 gulp 和 main-bower-files 对输出进行排序(gulp 顺序不起作用)
- 如果我更改输入顺序,为什么控制台会给我不同的输出,如下所示
- 编译输出中的TypeScript依赖项未按正确顺序解析
- Javascript输出缓冲区按错误的顺序放置内容
- Angular验证——按页面顺序输出无效字段
- Angular 2的ngFor——使用索引的反向输出顺序
- 由JS Promises排序的AJAX调用似乎按照正确的顺序运行,但数据库的输出却表明并非如此
- 反转输出字符串的顺序
- 数组保持以随机顺序输出- Push
- 如何将不断变化的顺序输出修改为随机输出
- 在输出到屏幕之前,如何按时间顺序对多个 Twitter 时间线进行排序
- 按所需顺序从数组中输出值
- 使用jQuery sortable()重新排序元素,并在PHP中输出正确的顺序