可观察.startWith不工作

时间:2018-02-05 19:48:55

标签: angular rxjs observable

' HTML'

<input type="number" placeholder="{{'Quantity' | translate}}" min="1" max="30" matInput formControlName="quantityControl" (change)="quantityChanged()"/>

&#39; controller.ts&#39;

this.inquiryForm = this.formBuilder.group({
      'quantityControl': new FormControl(1, [Validators.min(1), Validators.max(30)])
    });

this.inquiryForm.get('quantityControl').valueChanges.pipe(
          startWith(1),
          map(quantity => this.currentQuantity = (quantity > 0 ? quantity : 1))
        ).startWith(1);

来自&#39; rxjs / operators / startWith&#39;的startWith都没有。也不是Observable,也不是FormControl / FormGroup实例化设置的值。 ngOnInit后,表单值始终为null。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果我理解您的需要,您需要始终确保数量&gt; 0.

根据您的代码,这是stackblitz

更改如下:

this.inquiryForm.get('quantityControl').valueChanges.pipe( // 1 
  filter(quantity => quantity < 1) // 2 
).subscribe(value => {
  this.inquiryForm.get('quantityControl').setValue(1); // 3
});

实现你的逻辑

1 /我们订阅到valueChange运算符(就像IngoBûrk注意到的那样)

2 /我们过滤只保留值&lt; 0(因为我们不能仅对这些值采取行动)

3 /然后每次发出值(所以&lt; 0)时,我们只需将formControl值重置为1.

关于你的初始值错误,我不知道,它对我来说就像一个魅力。