首页 文章

可观察.startWith不工作

提问于
浏览
0

'HTML'

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

'controller.ts'

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);

来自'rxjs / operators / startWith'的startWith和Observable都没有,甚至没有在FormControl / FormGroup实例化中设置的值 . ngOnInit后,表单值始终为null . 有什么想法吗?

1 回答

  • 0

    如果我理解您的需要,您希望确保数量始终> 0 .

    这是stackblitz基于您的代码 .

    变化在这里:

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

    实现你的逻辑

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

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

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

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

相关问题