【发布时间】:2018-08-28 19:21:32
【问题描述】:
有没有办法让自动完成功能在表单中工作?我有一个输入地址的表格。我正在对州(这是在美国)使用自动完成(copied from Material Design's docs),并且除了所选状态未设置为 user.state 之外,它正在工作。因此,当我在提交时控制台注销 myForm.form.value 时,它看起来像这样:
user.name : "Test"
user.phone: ...
etc.
user.state 甚至没有出现。
我的(相关)代码:
<md-input-container>
<input
mdInput
placeholder="State"
[mdAutocomplete]="auto"
[formControl]="stateCtrl"
name="user.state"
[(ngModel)]="user.state"
>
</md-input-container>
<md-autocomplete
#auto="mdAutocomplete"
>
<md-option
*ngFor="let state of filteredStates | async" [value]="state"
(onSelectionChange)="selectState(state)"
>
{{ state }}
</md-option>
</md-autocomplete>
TS:
constructor(public dialog: MdDialog,) {
this.stateCtrl = new FormControl();
this.filteredStates = this.stateCtrl.valueChanges
.startWith(null)
.map(name => this.filterStates(name));
}
filterStates(val: string) {
return val ? this.states.filter(s => new RegExp(`^${val}`, 'gi').test(s))
: this.states;
}
即使我尝试使用 (onSelectionChange) 调用函数 selectState(state) 来设置 user.state,当我在提交时 console.log 表单时它仍然不显示。
selectState(value){
this.user.state = value;
}
【问题讨论】:
-
这里有点困惑——首先,你为什么在值的输入上同时执行 ngModel 和 formControl ?如果您删除了 ngModel 并在 formControl 上执行了 valueChanges,它会显示该值吗?您是否有一个 formGroup 作为表单控件的父级?自动完成应该与不改变的值无关,所以有些东西被错误地实现了。
标签: angular typescript autocomplete angular-material2