*ngIf 在 *ngfor 中验证 for 循环的每一项
*ngIf inside *ngfor to validate each item of the for loop
<li *ngFor="let year of paper?.years" class="list-group-item">
<div>
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div>
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
</li>
以上代码运行良好。但我想检查每个 fileId,是否为空。如果为 null,则不会生成链接,反之亦然。
我设置了*ngIf,下面是代码示例。但是它不起作用。
<li *ngFor="let year1 of paper?.years" class="list-group-item">
<div *ngif="year.questionPaper.fileId != ''">
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div *ngif="year.markScheme.fileId != ''">
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
</li>
我尝试了其他几种方法,但没有任何效果。像 :
定义 ng-模板。
你打错了。使用 *ngIf
<div *ngIf="year.questionPaper.fileId != ''">
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div *ngIf="year.markScheme.fileId = ''">
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
Syedur 答案的扩展,
*ngIf="year.markScheme.fileId = ''"
在上一行中,您错过了 ==
或 ===
,但没有错过 =
。可以是 =
无需使用 == 或 !=。
只需使用以下代码修改您的代码即可。
<li *ngFor="let year1 of paper?.years" class="list-group-item">
<div *ngIf="year.questionPaper.fileId">
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div *ngIf="year.markScheme.fileId">
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
</li>
解释:
<div *ngIf="year.questionPaper.fileId">
// 这将自动检查 null、未定义和空字符串.
Surjeet Bhadauriyas 的回答让我找到了解决问题的正确途径。
我仍然想用以下错误引用这个问题:"无法读取 属性 未定义的名称",因为搜索这个错误给我带来的主要是异步数据问题,这不是:
数组的数据点比字典多,我想在数组上迭代 (ngFor) 并在没有数据点时访问除 (ngIf) 之外的字典。
组件
letters: string[] = ["A", "B", "C"];
dictionary: { [key: string]: { name: string } } = {};
ngOnInit() {
this.dictionary["A"] = { name: "Alpha" };
this.dictionary["B"] = { name: "Beta" };
}
模板(不起作用)
<ng-container *ngFor="let letter of letters">
<ng-container *ngIf="letter!=C">
<pre>{{letter}}</pre>
<pre>{{dictionary[letter].name}}</pre>
</ng-container>
</ng-container>
模板(有效)
<ng-container *ngFor="let letter of letters">
<ng-container *ngIf="dictionary[letter]">
<pre>{{letter}}</pre>
<pre>{{dictionary[letter].name}}</pre>
</ng-container>
</ng-container>
<li *ngFor="let year of paper?.years" class="list-group-item">
<div>
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div>
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
</li>
以上代码运行良好。但我想检查每个 fileId,是否为空。如果为 null,则不会生成链接,反之亦然。
我设置了*ngIf,下面是代码示例。但是它不起作用。
<li *ngFor="let year1 of paper?.years" class="list-group-item">
<div *ngif="year.questionPaper.fileId != ''">
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div *ngif="year.markScheme.fileId != ''">
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
</li>
我尝试了其他几种方法,但没有任何效果。像 : 定义 ng-模板。
你打错了。使用 *ngIf
<div *ngIf="year.questionPaper.fileId != ''">
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div *ngIf="year.markScheme.fileId = ''">
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
Syedur 答案的扩展,
*ngIf="year.markScheme.fileId = ''"
在上一行中,您错过了 ==
或 ===
,但没有错过 =
。可以是 =
无需使用 == 或 !=。
只需使用以下代码修改您的代码即可。
<li *ngFor="let year1 of paper?.years" class="list-group-item">
<div *ngIf="year.questionPaper.fileId">
<a routerLink="/viewpdf/{{year.questionPaper.fileId}}">Question Paper - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.questionPaper.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
<div *ngIf="year.markScheme.fileId">
<a routerLink="/viewpdf/{{year.markScheme.fileId}}"> || Mark Scheme - {{year.formattedYear }}</a>
<a href="{{ downloadUrl }}/{{year.markScheme.fileId}}" class="fa fa-download" aria-hidden="true"></a>
</div>
</li>
解释:
<div *ngIf="year.questionPaper.fileId">
// 这将自动检查 null、未定义和空字符串.
Surjeet Bhadauriyas 的回答让我找到了解决问题的正确途径。 我仍然想用以下错误引用这个问题:"无法读取 属性 未定义的名称",因为搜索这个错误给我带来的主要是异步数据问题,这不是:
数组的数据点比字典多,我想在数组上迭代 (ngFor) 并在没有数据点时访问除 (ngIf) 之外的字典。
组件
letters: string[] = ["A", "B", "C"];
dictionary: { [key: string]: { name: string } } = {};
ngOnInit() {
this.dictionary["A"] = { name: "Alpha" };
this.dictionary["B"] = { name: "Beta" };
}
模板(不起作用)
<ng-container *ngFor="let letter of letters">
<ng-container *ngIf="letter!=C">
<pre>{{letter}}</pre>
<pre>{{dictionary[letter].name}}</pre>
</ng-container>
</ng-container>
模板(有效)
<ng-container *ngFor="let letter of letters">
<ng-container *ngIf="dictionary[letter]">
<pre>{{letter}}</pre>
<pre>{{dictionary[letter].name}}</pre>
</ng-container>
</ng-container>