angular - 选择数据时,视图中的详细信息会被破坏。使用角 6
问题描述
我的代码有问题,当我选择要在视图中显示其他详细信息的数据时。
在第一次选择中,显示正确的细节。在第二次选择中,显示第一个和第二个数据并在视图中被打碎。
例如,我有一些客户:
1. Client Name: Name 1. Telephone: 1234656. Adress: St. G.W.Bush, London
2. Client Name: Name 2. Telephone: 2222222. Adress: St. G.W, NY
3. Client Name: Name 3. Telephone: 3333333. Adress: St. A.B, Cuba
4. Client Name: Name 4. Telephone: 4444444. Adress: St. G.P.L, Germany
- 选择名称 1 时,详细显示电话:1234656。地址:St. GWBush, London
- 选择名称 2 时,详细显示电话:2222222。地址:St. GW, NY
- 选择名称 3 时,详细显示电话:1234656。地址:St. GWBush, London
我的html代码:
<div class="input-field col s4">
<fieldset>
<legend>Data:</legend>
<div class="input-field col s12">
<select (change)="onSelect($event.target.value)" [(ngModel)]="selectedClient.client_id" formControlName="client_id" id="client_id"
materialize="material_select" [materializeSelectOptions]="client">
<option value="" disabled selected>Name :</option>
<option *ngFor="let item of client" [value]="item.client_id">{{item.clientName}}</option>
</select>
</div>
<br>
<div class="input-field col s12">
Telephone:
<p>{{selectedClient.contactNo}}</p>
<br>
</div>
<br>
<div class="input-field col s12" >
Adress:
<p>{{selectedClient.address}}</p>
<br>
</div>
</fieldset>
</div>
TS 组件:
onSelect(clientid) {
let selectedClient = new Client('')
this.selectedClient = null;
for (let i = 0; i < this.client.length; i++) {
if (this.client[i].client_id === clientid) {
this.selectedClient = this.client[i];
}
}
}
我创建了这个Demo示例
请问有什么想法吗?
解决方案
你让它变得比它需要的更复杂。
- 直接使用对象
*ngFor
并将其绑定到,[ngValue]
而不是[value]
支持绑定到对象,因为[value]
绑定仅限于原始类型(如字符串和数字)。 - 摆脱
change
事件绑定以及它所绑定的方法。 - 引用选定对象时,在模板中使用安全导航运算符 (?.) 和空属性路径。您还可以将整个块包含
<div *ngIf="selecteditem">
在内部 html 对选择进行某些操作的地方。以下是相关且已更改的模板代码:
<fieldset>
<legend>Data:</legend>
<div class="input-field col s12">
<select [(ngModel)]="selecteditem" name="id_item" formControlName="id_item" id="id_item" materialize="material_select">
<option value="" disabled selected>Name :</option>
<option *ngFor="let item of options" [ngValue]="item">{{item.name}}</option>
</select>
</div>
<br>
<div class="input-field col s12">
id:<p>{{selecteditem?.id_item}}</p>
<br>
</div>
<br>
<div class="input-field col s12" >
Adress:<p>{{selecteditem?.adress}}</p>
<br>
</div>
</fieldset>
推荐阅读
- r - 在R中将日期更改为每月的第一天
- c++ - MFC CRichEditCtrl 有显示级别吗?
- python - 子类继承父类self.variable
- openssl - 如何使用带有 .cer 文件和 PKCS#8 加密私钥的 openSSL 创建 pfx
- python - 在 Windows 10 上运行 keras 模型 (.h5)
- windows - 将用户 ObjectID 写入变量#Powershell
- javascript - Fabric.js 偏移边界框问题
- google-chrome - 我在哪里可以修改 Chrome 书签?
- docker - Docker 为 numpy 构建,pandas 给出错误
- javascript - 如何使用Javascript循环遍历表?