如何获得反应形式的先前值?

时间:2018-12-01 10:05:15

标签: angular angular-reactive-forms

我有表格:

this.filterForm = this.fb.group({
      type: [null, [Validators.required]]});

我听变化:

this.filterForm.controls["type"].valueChanges.subscribe(
      selectedValue => {

});

在上面的代码中,我获得了元素的selectedValue,如何获得先前的值进行比较:

if (old("type") !== selectedValue) {
   // Call user method
}

我试图用以下形式的其他两个字段来做到这一点:

Observable.merge(this.filterForm.controls["classNumber"].valueChanges, this.filterForm.controls["classSuffix"].valueChanges).subscribe(response => {
        if (response[0] !== this.filterForm.value.classNumber && this.filterForm.controls["classSuffix"]) { // Call method }
    });

3 个答案:

答案 0 :(得分:3)

您可以使用此方法来解决您的问题:

已经创建了一个demo供您参考,并检查stackblitz控制台

this.filterForm
   .controls["type"]
   .valueChanges
   .subscribe(selectedValue => {
       console.log('New Value: ', selectedValue);                   // New value of Type;
       console.log('Old Value: ', this.filterForm.value['type']);   // Old value of Type; Avoid using this.filterForm.get('type').value - This will give you the current/latest value.
});

答案 1 :(得分:1)

为什么不使用变量oldValue?

oldValue:any;
this.filterForm.controls["type"].valueChanges.subscribe(
      selectedValue => {
           console.log(selectedValue,oldValue);
           oldValue=selectedValue; //<--give value to oldValue;
});

无论如何,在选择值中,仅当您选择一个新值时才会发生更改(如果显示下拉列表并选择尚未选择的值,则不会发生

答案 2 :(得分:1)

我使用 this solution 从响应式表单中获取先前的值。 Pairwise 将当前值和先前值放在一个数组中并发出。