【发布时间】:2018-01-25 07:58:40
【问题描述】:
我有一个简单的 HTML 表单。根据使用单选按钮选择的选项,使用 *ngIf 可以看到不同的输入字段。
<table>
<tr>
<td><label>name</label></td>
<td><input #name /></td>
</tr>
<tr>
<td>
<input type="radio" name="contact" value="phone" (click)="usePhone(true)" #p>
<label for"p">phone</label>
</td>
<td>
<input type="radio" name="contact" value="email" (click)="usePhone(false)" #m>
<label for"m">email</label>
</td>
</tr>
<tr *ngIf="phone">
<td><label>phone</label></td>
<td><input #phone /></td>
</tr>
<tr *ngIf="!phone">
<td><label>email</label></td>
<td><input #email /></td>
</tr>
<table>
在 TypeScript 文件中,我声明了一个布尔类型的变量“电话”和一个方法:
usePhone(phone: boolean): void {
this.phone = phone
}
现在,我想在单击按钮时获取值:
<button (click)="add(name.value, phone.value, email.value);">
OK
</button>
但是当我尝试它时,浏览器控制台说电话是未定义的,即使它被选中并且可见。当我删除 *ngIf 语句以使所有内容都可见时,它可以正常工作。我该怎么办?
【问题讨论】:
-
请记住,
ngIfdirective 不是隐藏/显示元素,实际上是从 dom 中删除它们。此外,如果您的组件中有值 (this.phone),则无需从模板发送该值,您可以直接从组件类访问。 -
我知道,我也尝试使用“add(name.value,phone.value)”来测试问题是否存在,我尝试获取已删除元素的值。但它没有用。
-
我怎样才能从组件类中获取值?