我在Angular项目中构建了一个自定义输入控件。一切正常,除非我将disable属性设置为true,否则setDisabledState上会发生一些无限循环,从而导致
preview-4adb70f742b91f09679fb.js:1 ERROR RangeError: Maximum call stack size exceeded
at eval (model.ts:1519)
at eval (model.ts:1531)
at eval (model.ts:1493)
at Array.forEach (<anonymous>)
at FormGroup._forEachChild (model.ts:1493)
at FormGroup._reduceChildren (model.ts:1530)
at FormGroup._reduceValue (model.ts:1518)
at FormGroup._updateValue (model.ts:1505)
at FormGroup.AbstractControl.updateValueAndValidity (model.ts:575)
at FormControl.AbstractControl._updateAncestors (model.ts:533)
我创建了一个显示问题的Stackblitz:https://stackblitz.com/edit/angular-n34zrj
我是否在设置内部FormControl的Disabled属性方面缺少某些东西(使用diabled(),enabled())?
如果是这样,请让我知道如何解决此问题。在头上砸了几个小时。
答案 0 :(得分:0)
在代码中,您可以通过根据布尔setDisabledState()参数设置禁用状态来强制执行循环。在此方法中,您调用disable()/ enable(),它们将自己调用setDisabledState()。
client = paramiko.client.SSHClient()
client.connect(...) # use your connection parameters here
sftp = client.open_sftp()
remote_files = [x.filename for x in sorted(sftp.listdir_attr(), key = lambda f: f.st_mtime)]
https://netbasal.com/angular-custom-form-controls-made-easy-4f963341c8e2
尝试类似Netanel Basal的方法:
| Sort-Object Pattern -Unique
答案 1 :(得分:0)
如果您使用 Severin Klugs 回答中所述的错误,通过停止不必要的调用但在应用函数之前检查它们是否相同来修复
setDisabledState?(isDisabled: boolean): void {
if(isDisabled == this.control.disabled) return;
isDisabled ? this.control.disable() : this.control.enable();
}