ngIf 仅在 ngFor 的一个部分中列出
ngIf list only on one section in ngFor
我正在使用 Angular8 并有一个 ngFor 来显示一组人。
这是数组
private myArray: {}[] =
[
{
"name": "name1",
"description": "description goes here",
},
{
"serviceName": "name2",
"description": "description goes here",
}
]
这是HTML
<div class="content" *ngFor="let details of myArray">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul *ngIf="isName1">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>
我有一个 foreach 循环,它循环遍历数组,如果它是数组中的第一个,则将 isName1
更改为 true。
this.myArray.forEach(s => {
if(name === 'name1') {
this.isName1 = true;
}
});
我想要做的是让 ul
只显示第一个元素而不显示第二个元素,但它会同时显示两个元素。有什么办法可以做到这一点?
谢谢
将if(name === 'name1')
更改为if(s.name === 'name1')
s.name
这样试试:
this.myArray.forEach(s => {
if(s.name === 'name1') {
this.isName1 = true;
}
});
<div class="content" *ngFor="let details of myArray">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul *ngIf="details.name === 'name1'">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>
考虑使用 ng-template
使用的美妙之处在于它不会在 HTML 中显示(作为内联或块元素)。
示例代码:
<div class="content" *ngFor="let details of myArray">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul>
<ng-template [ngIf]="isName1">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
</ng-template>
<ng-template [ngIf]="!isName1">
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ng-template>
</ul>
</div>
据我所知,你想在 ngfor 中限制项目,这很重要 link
所以你的代码看起来像
<ng-container *ngFor="let details of myArray;let i=index" >
<div class="content" *ngIf="i==0">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul >
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>
</ng-container>
如果您 总是 只想将条件应用于第一个元素,尽管有值,您可以使用 first
,它由 [=24= 提供] 在 *ngFor
。所以就没有必要使用 forEach
循环:
<div class="content" *ngFor="let details of myArray; let first = first">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul *ngIf="first">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>
我正在使用 Angular8 并有一个 ngFor 来显示一组人。
这是数组
private myArray: {}[] =
[
{
"name": "name1",
"description": "description goes here",
},
{
"serviceName": "name2",
"description": "description goes here",
}
]
这是HTML
<div class="content" *ngFor="let details of myArray">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul *ngIf="isName1">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>
我有一个 foreach 循环,它循环遍历数组,如果它是数组中的第一个,则将 isName1
更改为 true。
this.myArray.forEach(s => {
if(name === 'name1') {
this.isName1 = true;
}
});
我想要做的是让 ul
只显示第一个元素而不显示第二个元素,但它会同时显示两个元素。有什么办法可以做到这一点?
谢谢
将if(name === 'name1')
更改为if(s.name === 'name1')
s.name
这样试试:
this.myArray.forEach(s => {
if(s.name === 'name1') {
this.isName1 = true;
}
});
<div class="content" *ngFor="let details of myArray">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul *ngIf="details.name === 'name1'">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>
考虑使用 ng-template
使用的美妙之处在于它不会在 HTML 中显示(作为内联或块元素)。
示例代码:
<div class="content" *ngFor="let details of myArray">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul>
<ng-template [ngIf]="isName1">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
</ng-template>
<ng-template [ngIf]="!isName1">
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ng-template>
</ul>
</div>
据我所知,你想在 ngfor 中限制项目,这很重要 link
所以你的代码看起来像
<ng-container *ngFor="let details of myArray;let i=index" >
<div class="content" *ngIf="i==0">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul >
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>
</ng-container>
如果您 总是 只想将条件应用于第一个元素,尽管有值,您可以使用 first
,它由 [=24= 提供] 在 *ngFor
。所以就没有必要使用 forEach
循环:
<div class="content" *ngFor="let details of myArray; let first = first">
<h2>{{details.name}}</h2>
<div class="description">{{details.description}}</div>
<ul *ngIf="first">
<li>
<i class="fa fa-check-circle"></i>
<span>item1</span>
</li>
<li>
<i class="fa fa-check-circle"></i>
<span>item2</span>
</li>
</ul>
</div>