Angular - 错误 RangeError:超出最大调用堆栈大小。从 fromControl 值更改订阅中删除 uniqueUntilChanged() 后

问题描述 投票:0回答:1

我有两个角度组件,一个父组件和一个子组件,都有自己的表单字段。 我在两个组件中设置了更改监听器来监听表单控件值的更改,并在输入某些表单控件时禁用某些字段。

当尝试从组件 1 中的更改侦听器禁用组件 2 内的表单控件时,表单控件不会立即禁用,而是在键入第二个字符后禁用。

经过一些研究,我发现在我的更改侦听器订阅中使用distinctUntilChanged() 是原因。从订阅中删除 uniqueUntilChanged() 解决了主要问题,但是,现在它导致以下控制台错误:ERORR:RangeError:超出最大调用堆栈大小。


changeListener(){
        this.myForm.get('sample_control_name').valueChanges.subscribe(v => { 
            if(isNotEmpty(v)) {
                this.childComponent.getFormGroup().get('sample_control_name_1').disable();
            } 
            else {
                this.childComponent.getFormGroup().get('sample_control_name_1').enable();
            }
        })
}
angular angular-promise form-control formgroups
1个回答
0
投票

看来你基本上已经创建了一个循环。当您调用启用或禁用时,

valueChanges
可观察对象将发出。以下是 Angular 文档中的相关部分:

您可以尝试将

{emitEvent: false}
添加到您的禁用呼叫中,这应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.