Angular *ngFor 在不同的 div 上
Angular *ngFor on different divs
我在 angular 4 项目中有一个使用 material flex 的标记,看起来像这样。
<div fxLayout="row">
<div fxFlex="65">
</div>
<div fxFlex="35">
</div>
</div>
我有一个这样的元素数组:
public array: [object] = [
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
];
我想遍历这个数组并填充 65% div 中所有元素的一半和 35% div 中的其余元素。如何正确使用 *ngFor
指令?现在我有这样的解决方案。但是它看起来很糟糕而且不可读。
<div fxLayout="row">
<div fxFlex="65">
<div *ngFor="let item of array; let i = index">
<div *ngIf="i < 3">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array; let i = index">
<div *ngIf="i >= 3">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
</div>
还有其他解决方案吗?
我也尝试使用 <template>
元素。但是我的尝试失败了。
请帮助我!
您可以使用SlicePipe, as shown in this plunker。
<div fxLayout="row">
<div fxFlex="65">
<div *ngFor="let item of array | slice:0:half">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array | slice:half">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
half
属性 将在组件 class:
中定义
import {Component} from '@angular/core';
@Component({
...
})
export class Component1 {
public array: [object] = [
{
firstName: 'first1',
lastName: 'last1'
},
{
firstName: 'first2',
lastName: 'last2'
},
...
];
public get half(): number {
return Math.ceil(this.array.length / 2);
}
}
只需将 *ngFor
中的数组切片:
<div fxFlex="65">
<div *ngFor="let item of array.slice(0, array.length / 2)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array.slice(array.length / 2, array.length)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxLayout="row">
<div fxFlex="65">
<div *ngFor="let item of array.slice(0,array.length/2)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array.slice(array.length/2)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
使用 [ ... ].slice()
for first half slice(0, half)
for second half slice(half)
我在 angular 4 项目中有一个使用 material flex 的标记,看起来像这样。
<div fxLayout="row">
<div fxFlex="65">
</div>
<div fxFlex="35">
</div>
</div>
我有一个这样的元素数组:
public array: [object] = [
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
{
firstName: 'value',
lastName: 'value'
},
];
我想遍历这个数组并填充 65% div 中所有元素的一半和 35% div 中的其余元素。如何正确使用 *ngFor
指令?现在我有这样的解决方案。但是它看起来很糟糕而且不可读。
<div fxLayout="row">
<div fxFlex="65">
<div *ngFor="let item of array; let i = index">
<div *ngIf="i < 3">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array; let i = index">
<div *ngIf="i >= 3">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
</div>
还有其他解决方案吗?
我也尝试使用 <template>
元素。但是我的尝试失败了。
请帮助我!
您可以使用SlicePipe, as shown in this plunker。
<div fxLayout="row">
<div fxFlex="65">
<div *ngFor="let item of array | slice:0:half">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array | slice:half">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
half
属性 将在组件 class:
import {Component} from '@angular/core';
@Component({
...
})
export class Component1 {
public array: [object] = [
{
firstName: 'first1',
lastName: 'last1'
},
{
firstName: 'first2',
lastName: 'last2'
},
...
];
public get half(): number {
return Math.ceil(this.array.length / 2);
}
}
只需将 *ngFor
中的数组切片:
<div fxFlex="65">
<div *ngFor="let item of array.slice(0, array.length / 2)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array.slice(array.length / 2, array.length)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxLayout="row">
<div fxFlex="65">
<div *ngFor="let item of array.slice(0,array.length/2)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
<div fxFlex="35">
<div *ngFor="let item of array.slice(array.length/2)">
<p>{{ item.firstName }}</p>
<p>{{ item.lastName }}</p>
</div>
</div>
</div>
使用 [ ... ].slice()
for first half slice(0, half)
for second half slice(half)