ngIf 在索引数组时给出“TypeError:无法读取未定义的属性‘visit’”
2021-12-06
342
我在 ngFor 中有一个 ngIf,我使用索引来检查数组中该索引处的项目是否等于某个值,但每当我尝试索引任何内容时,它都会给出
Module build failed (from ./node_modules/@ngtools/webpack/src/ivy/index.js):
TypeError: Cannot read property 'visit' of undefined
at AstTranslator.translate (<projdirectory>/node_modules\@angular\compiler-cli\src\ngtsc\typecheck\src\expression.js:81:24)
progress.component.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-progress',
templateUrl: './progress.component.html',
styleUrls: ['./progress.component.scss']
})
export class ProgressComponent implements OnInit {
temp = [
"Complete",
"NotAttempted",
"NotAttempted",
"NotAttempted",
"NotAttempted",
"NotAttempted",
"NotAttempted"
]
tasks = [some array of same length]
constructor() { }
ngOnInit(): void {
}
}
progress.component.html
<div class="container">
<div class="wrapper">
<table class = "items">
<thead>
<tr class = "header-row">
<th class = "title-header">Title</th>
<th class = "due-header">Due Date</th>
<th class = "status-header">Status</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let task of tasks; let index = index">
<td>{{ task.title }}</td>
<td>{{ task.dueDate}}</td>
<td>
<div class = "complete" *ngIf="temp[index]==='Complete'">Complete </div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
我不明白 temp 既然是硬编码的,为什么还未定义? 粗略的 stackblitz 示例: https://stackblitz.com/edit/angular-ivy-xdk4jr?file=package.json 如果需要其他文件,请告诉我。
2个回答
我遇到过类似的问题,这些步骤很有帮助:
-
删除您的
node_modules
文件夹 -
运行
npm cache clean --force
-
运行
npm install
-
运行
ng s
Deepak
2021-12-06
您的代码存在逻辑问题。
您的 temp 数组是包含 7 个项目的固定列表
tasks 是未知数量的项目。
您正在循环遍历任务并(出于某种原因)获取要比较的任务元素的索引项。这意味着如果您有超过 7 个任务,您将尝试访问未定义的 temp[7]。
如果您像这样设置数据,代码会更好:
var taskItems = [{task: task1, status: 'Complete;},
//etc.
];
然后是 html:
*ngFor= "let task of taskItems"
*ngIf="task.status == 'Complete'"
或者如果您不喜欢该解决方案,请将其添加到 html:
*ngIf="temp && temp.length > index && temp[index]==='Complete'"
Rick
2021-12-06