我正在学习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有两个地址。我添加了一个新地址,之后,我对第一个地址进行了更改。我犯了一个错误,想要获取原始值,我点击重置按钮,它将删除我的新地址,它将重置表单上的所有数据。
如何重置每个地址而不是整个表单?
由于
答案 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()
来设置初始值。
另见