Angular ReactiveForm formControl计数器

时间:2017-09-07 18:01:54

标签: angular angular-reactive-forms

我尝试在Angular中构建一个计数器作为ReactiveForm来生成一个JSON字符串,我想将其发送到另一个表单以继续购买过程。

我的计数器工作正常,但是没有输入字段我没有将值输入字符串。但我不希望为用户提供输入字段。

我目前的FormGroup代码如下所示:

<div formGroupName="ticket">
    <div class="row">
      <p>Adults</p>
      <i class="fa fa-minus-circle fa-2x" aria-hidden="true" (click)="decrementAdult();"></i>
      <p formControlName="valueAdult" ngDefaultControl>{{counterValueAdult}}</p>
      <i class="fa fa-plus-circle fa-2x" aria-hidden="true" (click)="incrementAdult();"></i>
    </div>
    <div> ... same for children ... </div>
  </div>

在request.component.ts文件中,我有一个FormGroup:

requestForm = new FormGroup({
  foo1: new FormControl(),
  foo2: new FormControl(),
  ticket: new FormGroup({
    valueAdult: new FormControl(),
    valueChildren: new FormControl()
  })
});
incrementAdult() {
  this.counterValueAdult +=1;
  if (this.counterValueAdult >= this.maxAdult)
    this.counterValueAdult = 4;
    this.requestForm.get('ticket.valueAdult').setValue = this.counterValueAdult;
}
decrementAdult() {
  this.counterValueAdult -=1;
  if (this.counterValueAdult <= this.minAdult)
    this.counterValueAdult = 1;
    this.requestForm.get('ticket.valueAdult').setValue = this.counterValueAdult;
}

在表格的最后,我抓住了改进的输入:

 <p>{{ requestForm.value | json }}</p>

并返回:{“foo1”:value,“foo2”:value,“ticket”:{“valueAdult”:null,“valueChildren”:null}}

有没有人有想法取回括号之间的值而不是null?

<p ... >{{...}}</p>

2 个答案:

答案 0 :(得分:0)

你可以使用

ticket.get('valueAdult').value

无论如何,为什么要使用reactiveForm?你不需要它,只是

@Component({
  selector: 'bla-bla',
  template: '<p>ticket.adults</p>'
})
export class HeroDetailComponent1 {
  ticket:any={"adults":3};
}

答案 1 :(得分:0)

您只需要使用增量/减量方法中的计算值更新valueAdult的值。

incrementAdult(){
  // as before
   this.requestForm.get('ticket').get('valueAdult').setValue = this.counterValueAdult;
   // or  this.requestForm.get('ticket.valueAdult').setValue = this.counterValueAdult;
}

decrementAdult(){
  // as before
   this.requestForm.get('ticket').get('valueAdult').setValue = this.counterValueAdult;
}