首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular FormBuilder不重置数组

Angular FormBuilder不重置数组
EN

Stack Overflow用户
提问于 2017-10-03 05:49:42
回答 2查看 53关注 0票数 1

在每次尝试保存所选项目后,我希望该列表被清除或清空。例如,用户选择了一个项目-选择保存。在控制台中,您将查看所选的对象。现在,如果您选择另一项并选择保存,您仍将看到在控制台中选择的前一项。最好在每次保存后清除该阵列。

第一次保存:

代码语言:javascript
复制
selectedMessages
Array(1)
{messageID: 222, message: "text"}

第二次保存:

代码语言:javascript
复制
selectedMessages
Array(2)
{messageID: 222, message: "text"}
{messageID: 331, message: "text Two"}

component.ts

代码语言:javascript
复制
rMessages: Message[] = [];
  aMessages: Message[] = [];


constructor( 
  public formBuilder: FormBuilder,
  ) { 
    this.messageForm = formBuilder.group({
      selectedMessages: this.formBuilder.array([])
    })
   }
    save(form){
    console.log(form.value.selectedMessages)
    }

select(rmessage:Message, isChecked: boolean){
    const selectedMessages = <FormArray>this.messageForm.controls.selectedMessages;
    if(isChecked) {
      selectedMessages.push(new FormControl(rmessage));  
    } else {
      let index = selectedMessages.controls.findIndex(x => x.value.messageID == rmessage.messageID);
      selectedMessages.removeAt(index);
    }
  }
buildChecked() {
    const arr = this.rMessages.map(message => {
      console.log(this.formBuilder.control(message.messageID))
      return this.formBuilder.control(message.messageID)
    });
    return this.formBuilder.array(arr);
  }

HTML

代码语言:javascript
复制
<form [formGroup]="messageForm" (ngSubmit)="save(messageForm)">
    <ion-list active text-wrap *ngSwitchCase="'received'" >
      <div class="items"> 

    <ion-item *ngFor="let rmessage of rMessages; index as i">
        <ion-label>
          {{rmessage.message}}
        </ion-label>
        <ion-checkbox (ionChange)="select(rmessage, $event.checked)" value="rmessage"></ion-checkbox>
    </ion-item>

      </div>
        <button ion-button full type="submit"  style="font-size:1.8rem">save</button>
    </ion-list>
  </form>

已更新-重置不起作用。正在获取null。

代码语言:javascript
复制
rMessages: Message[] = [];
      aMessages: Message[] = [];


    constructor( 
      public formBuilder: FormBuilder,
      ) { 
        this.messageForm = formBuilder.group({
          selectedMessages: this.formBuilder.array([])
        })
       }
        save(form){
this.rMessages = this.rMessages.filter((resultTwo) => {
      return !form.value.receivedMessages.find((resultOne) => {

        return resultTwo.messageID === resultOne.messageID
      })
    })
       this.aMessages = this.aMessages.concat(form.value.receivedMessages.filter((resultOne) => {
        console.log(resultOne, 'results')

        return resultOne

    }))
        this.messageForm.reset()
        }

    select(rmessage:Message, isChecked: boolean){
        const selectedMessages = <FormArray>this.messageForm.controls.selectedMessages;
        if(isChecked) {
          selectedMessages.push(new FormControl(rmessage));  
        } else {
          let index = selectedMessages.controls.findIndex(x => x.value.messageID == rmessage.messageID);
          selectedMessages.removeAt(index);
        }
      }
    buildChecked() {
        const arr = this.rMessages.map(message => {
          console.log(this.formBuilder.control(message.messageID))
          return this.formBuilder.control(message.messageID)
        });
        return this.formBuilder.array(arr);
      }
EN

回答 2

Stack Overflow用户

发布于 2017-10-03 06:52:15

您可以清除该表单

代码语言:javascript
复制
this.messageForm.reset()

文本将保留在控制台中

票数 1
EN

Stack Overflow用户

发布于 2017-10-04 13:48:23

如果要清除数组并将其设置为空,请使用setControl()

代码语言:javascript
复制
this.messageForm.setControl('selectedMessages', this.formBuilder.array([]))

这将替换您现有的数组。

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

https://stackoverflow.com/questions/46534233

复制
相关文章

相似问题

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