如何将Angular4的FormGroup重置为其原始状态?

时间:2017-08-31 20:39:45

标签: javascript angular typescript

我正在学习Angular4更具体的反应形式。我正在运行英雄演示,我被困在某事上。

Plunker 上,我们必须选择一位超级英雄,它会显示英雄的地址。我为每个地址添加了一个重置​​按钮,但是当我点击重置地址时,它会重置所有地址。

在我们的例子中:

 createForm() { //Set up form and array of addresses
    this.heroForm = this.fb.group({
      name: '',
      secretLairs: this.fb.array([]),
      power: '',
      sidekick: ''
    });
  }

  //Function to revert changes
  revert() { this.ngOnChanges(); }

  //This function will set the name from original object
  ngOnChanges() { 
    this.heroForm.reset({
      name: this.hero.name
    });

    //It will reload the form array with original values
    this.setAddresses(this.hero.addresses);
  }

  //Create new formgroups and add to formArray
  setAddresses(addresses: Address[]) {
    const addressFGs = addresses.map(address => this.fb.group(address));
    const addressFormArray = this.fb.array(addressFGs);
    this.heroForm.setControl('secretLairs', addressFormArray);
  }

这没关系,它可以工作,但它会重置整个表单。例如,Whirlwind有两个地址。我添加了一个新地址,之后,我对第一个地址进行了更改。我犯了一个错误,想要获取原始值,我点击重置按钮,它将删除我的新地址,它将重置表单上的所有数据。

如何重置每个地址而不是整个表单?

由于

1 个答案:

答案 0 :(得分:2)

您可以使用func spawnBalls() { let ball = balls[Int(arc4random_uniform(UInt32(balls.count)))] ball.position = CGPoint(x: 0, y: 250) ball.size = CGSize(width: 70, height: 70) self.addChild(ball) } value在初始化后读取值。

getRawValue()之后,您可以使用先前读取的值reset()来设置初始值。

另见