我对Angular 17信号效应有问题.当设施信号更新时,我try 重置效果中的表格.

我在浏览器控制台中出现此消息错误:

NG 0600:默认情况下,computedeffect中不允许写入信号.在CreateEffectOptions中使用allowSignalWrites来启用此内部效果.

如果我从效果中删除the_form.重置,控制台没有错误.如果我添加效果选项以allowSignalWrites,它就会起作用,但我不明白为什么因为我不写信号,所以我只是重置了一个表单.

formResetEffect = effect(() => {
if (this.facilities()) {
    this._form.reset({
        disabled: false,
        value: null
    });
}}, {allowSignalWrites: true});

你能帮助我理解这种行为吗?

谢谢

更新 :

看来只有当我使用PrimeNG的p-SYS组件时,这个问题才会出现.我已经判断了GitHub存储库中p-SYS的代码,这个组件现在使用信号.

primeng dropdown github

您认为写入p-SYS组件的信号可能是问题的原因吗?

这里是一个堆栈闪电战来重现问题: stackblitz

推荐答案

这是unintended leaking of the reactive context.PrimeNG组件似乎会监听表单的状态或值.

您的代码调用FormGroup.reset(),这会更改表单的状态和值.因此,statusChanges()valueChanges()会发出新的值.重要的是,它们同步emits ,因此react 上下文仍然设置.

因此,当PrimeNG组件try 设置一些信号以响应此更改时,会触发错误.

很容易验证: StackBlitz

Angular相关问答推荐

如何将CDkDropList与Angular FormArray和FormGroup一起使用?

将kendo—colorpicker的kendo弹出窗口附加到组件''

Angular 17多内容投影错误

如何捕获生命周期方法中抛出的Angular组件错误?

NgRx Effects 抛出类型错误,我不知道发生了什么

Angular 按钮指令错误地附加子元素

角 12 固态继电器 |页眉页脚在加载程序到来之前显示

如何更改 Angular material 按钮中的内部 RippleColor 和 UnboundedRipple 效果?

Aws 代码部署在 BeforeBlockTraffic 步骤失败,即使在更新策略后也会超时

Angular2:更新数组时*ngFor不更新

在 Angular material表上调用 renderRows()

如何设置Angular 4背景图片?

带有嵌套表单数组的 Angular react式表单

如何以像素为单位将属性绑定到 style.width?

如何在 Angular4 中访问组件的 nativeElement?

Angular CLI 自定义 webpack 配置

angular2:错误: TypeError: Cannot read property '...' of undefined

Angular2:如果 img src 无效,则显示占位符图像

Angular2 中的providers提供者是什么意思?

如何在悬停时向元素添加类?