【发布时间】:2020-12-07 15:55:13
【问题描述】:
一个元素中变量的初始化和我一直忽略的控制台中的错误,在另一个元素的其他地方造成了问题。为什么 Angular 会这样?
当我不初始化与 *ngIf 一起使用的另一个变量时,javascript 在测试其长度时抛出“未定义”(预期)。但这也会导致 *ngFor 无法正常用于下拉菜单(没有加载数据 - 意外)。顺便说一句,我意识到,这不仅仅发生在 datalist 上。如果 *ngIf 在此代码中有错误,*ngFor 在任何组件上都会失败。
那么,当 *ngIf 时,为什么 *ngFor 会因为下拉(第一个元素)失败 无法在表(另一个元素)上验证条件?我是不是该 以不同的方式思考这个问题,Angular 是一个框架,并且 如果我在管理错误方面做得不好,可能会表现不正常 它的构造?
下面是重现错误的代码。取消注释建议的行,错误就会消失...
HTML
<div class="row">
<div class="col">
<input
type="text" class="form-control" list="tktnum"
placeholder="Ticket Number..." [(ngModel)]="tktNum"
>
<datalist id="tktnum">
<option *ngFor="let a of tktVals">{{a.TicketNo}}</option>
</datalist>
</div>
</div>
<br><br>
<div class="row">
<div class="col">
<table class="table table-hover table-striped table-dark table-bordered"
*ngIf="reportElements.length > 0">
<thead>
<tr>
<th scope="col">Ticket Number</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let _ of reportElements">
<td>{{ _.F1 }}</td>
</tr>
</tbody>
</table>
</div>
</div>
打字稿
import { Component, OnInit, VERSION } from "@angular/core";
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
reportElements: [{F1: 3}];
tktVals: Array<{ TicketNo: string }> = [{ TicketNo: "1" }, { TicketNo: "2" }];
tktNum: any;
constructor() {}
ngOnInit(): void {
this.tktVals = [{ TicketNo: "1" }, { TicketNo: "2" }];
//Uncomment the following line of code and it will start working as expected.
//this.reportElements = [{F1: 3}];
console.log(this.reportElements.length);
}
}
【问题讨论】:
标签: javascript html angular typescript