value上的“ ObjectUnsubscribedError对象取消订阅”在窗体上的自定义验证器中更改

时间:2019-08-28 13:27:51

标签: angular angular-reactive-forms

我有一个自定义验证服务,可以在表单中使用,以防一个输入依赖于另一个输入

this.myForm = new FormGroup(group, [ServiceValidator.customValidator]);

验证器看起来与此类似:

static customValidator(g: FormGroup) {
    this._unsubscriber$ = new Subject<boolean>();

    g.controls['myControl'].valueChanges.pipe(takeUntil(this._unsubscriber$)).subscribe(values => {
       // Logic here
        if (this._unsubscriber$) {
            this._unsubscriber$.next(true);
            this._unsubscriber$.unsubscribe();
        } 
    });
}

我注意到,如果我多次将值更改为myControl输入,尽管我尝试退订,但它开始变得越来越慢。当我开始使用takeUntil时,我开始出现此错误。

我的ServiceValidator不是角度分量,因此我不能使用ngOnDestroy。 另外,只要更改表单中的值,就会调用customValidator

我在做什么错? 如何安全退订?

1 个答案:

答案 0 :(得分:2)

请记住,您不可以使用

free()

但是

this._unsubscriber$.next(true);
this._unsubscriber$.unsubscribe();