首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法重置包含select的反应窗体

无法重置包含select的反应窗体
EN

Stack Overflow用户
提问于 2018-07-26 19:35:20
回答 3查看 9.3K关注 0票数 6

我使用的是angular 6

我的html是

代码语言:javascript
复制
<form [formGroup]="myForm" >
  <label>
    <input type="text" formControlName="name" placeholder="name" required autofocus >
  </label>
  <label>
    <select name="drop" formControlName="drop">
      <option value="developer"selected >developer</option>
      <option value="designer">designer</option>
      <option value="admin">admin</option>
    </select>
  </label>
</form>

即使我在页面第一次加载时在"developer“option中设置了selected,"developer”也没有被选中。我猜这是angular的一个小bug,它不能正确呈现html,所以我在定义表单时放入了我的组件:

代码语言:javascript
复制
  myForm = this.formBuilder.group({
    name:['',Validators.required],
    drop:['developer']
  });

而且它是有效的。

真正奇怪的是,当我在表单外的另一个按钮内执行this.myForm.reset();时,"name“是空的,但下拉菜单也是完全空的,只是空白,但它应该显示"developer",对吧?

该按钮隐藏了一些元素,并且应该重置表单,它位于表单之外

代码语言:javascript
复制
  getOtherData(id){
    this.myForm.reset();

这不起作用,所以我必须这样做

代码语言:javascript
复制
this.myForm.setValue({
  name: '',
  drop: 'developer'
});

为了实际重置表单。与reset结合使用的select出了什么问题?我想使用一次reset并完全重置表单,没有“hack”我怎么做呢?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-26 20:07:59

真正奇怪的是,当我在表单外的另一个按钮内执行this.myForm.reset()时,"name"应该是空的,但是dropdown也是完全空的,只是空白,但它应该显示"developer",对吧?

不,它不应该。当我们调用reset()时会发生什么?最重要的是,it 将你所有的值设置为 null.。

在您的select中,您想要选择的字段具有值"developer",因此该值当然不会被设置,因为您刚刚将该值重置为null,即

代码语言:javascript
复制
null === 'developer' // false!  

这是一个Angular表单,因此Angular实际上并不关心HTML属性(在本例中是selected),而是监听表单控件以及那里发生的事情。因此,您需要做的是用您想要的值重置表单,因为您可以在reset上给出值

代码语言:javascript
复制
this.myForm.reset({
  name: '',
  drop: 'developer'
});
票数 6
EN

Stack Overflow用户

发布于 2018-07-26 19:48:51

你应该使用patch方法来重置表单

更新所有FormControl值的setValue()方法。

patchValue()方法还将从模型中设置FormControl值,但仅限于我们在模型中提到的那些值。

代码语言:javascript
复制
this.myForm.patchValue({
  name: ''
});

如果要对特定FormControl值使用reset方法

代码语言:javascript
复制
  this.myForm.get('name').reset(); 

示例:https://stackblitz.com/edit/patch-with-form

票数 3
EN

Stack Overflow用户

发布于 2018-07-26 20:03:00

您可以同时使用reset方法和传值,如下所示。注意:如果要验证对象,请始终与null进行比较。

代码语言:javascript
复制
 this.form.reset({
    name: '',
    drop: [null]
  });

FormGroup

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51537870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档