加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 5 – 使用对象进行表单控制

发布时间:2020-12-17 17:34:20 所属栏目:安全 来源:网络整理
导读:我目前正在研究由Django支持的Angular应用程序. 该应用程序的一部分是它需要显示成员列表. members数组看起来有点像这样: [ { name: 'John Smith',id: 3,score_set: [...] },{ name: 'Jane Doe',id: 7,{ name: 'Bill Appleseed',{ name: 'Bob Lee',score_se
我目前正在研究由Django支持的Angular应用程序.

该应用程序的一部分是它需要显示成员列表. members数组看起来有点像这样:

[
  {
    name: 'John Smith',id: 3,score_set: [...]
  },{
    name: 'Jane Doe',id: 7,{
    name: 'Bill Appleseed',{
    name: 'Bob Lee',score_set: [...]
  }
]

我得到了它的工作,但我还需要用户能够编辑这些成员的名字.我尝试使用Reactive Forms来实现这个目的:

首先,我创建了一个仅由一个FormArray组成的FormGroup.此FormArray基本上包含所有成员对象:

this.form = this.fb.group({
  roster: this.fb.array(this.members.map((elem) => [elem,Validators.required]))
});

接下来,我写出了组件的模板:

<form>
  <div [formGroup]="form">
    <div formArrayName="roster">
      <div *ngFor="let control of form.controls.roster.controls">
        <div class="form-group">
          <input class="form-control" [formControl]="control" placeholder="Enter name">
        </div>
      </div>
    </div>
  </div>
</form>

但是,不是显示每个成员的name属性,而只是尝试显示整个对象,制作[Object object].有没有办法配置每个FormControl使用name属性作为值?

我希望它只有名称显示在< input>中,并且当用户编辑< input>时它更新了对象的name属性,同时保留了所有其他属性.

任何帮助,将不胜感激!

解决方法

由于您希望保留完整对象,因此您必须创建formGroups,如下所示:

interface Member {
  id: number;
  name: string;
}

ngOnInit(): void {
  this.formGroup = this.formBuilder.group({
    roster: this.formBuilder.array(this.members.map(elem => this.createMemberGroup(elem)))
  });
}

createMemberGroup(member: Member): FormGroup {
  return this.formBuilder.group({
    ...member,name: [member.name,Validators.required]
  });
}

HTML:

<form class="container pt-2" [formGroup]="formGroup">
  <div formArrayName="roster">
    <div 
      [formGroupName]="i" 
      *ngFor="let control of formGroup.get('roster').controls; index as i">
      <div class="form-group">
        <input 
          class="form-control" 
          formControlName="name" 
          placeholder="Enter name" 
          [class.is-invalid]="control.invalid">
        <small class="text-danger" *ngIf="control.invalid">Required</small>
      </div>
    </div>
  </div>
</form>

DEMO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读