FormBuilder 控件导致“表达式在检查后已更改”异常

2023-12-23

我有一个正在通过编程方式实例化的表单DynamicComponentLoader::loadIntoLocation。表单代码如下:

constructor (
    private _builder: FormBuilder
) {
    this.editForm = _builder.group({
        name: ['', Validators.required],
        email: ['', Validators.compose([Validators.required, Helpers.emailValidator])],
        phone: [''],
        phoneAlt: [''],
        location: [''],
        dob: [''],
        bio: [''],
    });
}

您会注意到某些表单没有验证器(据我所知,这与使用相同Validators.nullValidator,我已经对两者进行了测试)。

在我的模板中,我有以下代码(对于每个控件):

<label for="phone">Contact Number <span *ngIf="!phone.valid">- {{e(phone)}}</span></label>
<input type="text" name="phone" id="phone" ngControl="phone" #phone="ngForm">

第一个没有验证器的控件在命中时会抛出以下异常两次!phone.valid模板的一部分:

EXCEPTION: Expression '!phone.valid in e@15:43' has changed after it was checked. Previous value: 'true'. Current value: 'false' in [!phone.valid in e@15:43]

我在任何时候都不会触摸控件或this.editForm初始创建后,因此,就我的代码而言,不应进行任何更改。

我知道我可以通过调用来抑制错误enableProdMode()但我宁愿解决问题而不是隐藏它。

编辑(2月8日):此后,我尝试将模式的内容移至单独的页面,但错误仍然存​​在。这表明问题与我创建和加载模式的方式无关,而是与 ControlGroup 或 FormBuilder 有关。

问题的笨蛋 http://plnkr.co/edit/YBU0TRyGI4uMx2HCosqB?p=preview | 无模态的 Plunker http://plnkr.co/edit/KkgSU3I44CZGujsrfbE9?p=preview


谢谢qdouble https://github.com/qdouble为我解决这个问题角抖动 https://gitter.im/angular/angular?at=56b8d0a9939ffd5d15f677d0 chat.

该问题似乎是由 Angular 解析页面的顺序引起的。从上到下,ngIf="!phone.valid"之前正在解析phone.valid已初始化。通过在 if 语句中添加 catch 以确保它不为空,可以轻松解决此问题*ngIf="phone.valid === null ? false : !phone.valid"(或通过在输入后移动标签)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FormBuilder 控件导致“表达式在检查后已更改”异常 的相关文章

随机推荐

  • 带有 Node.js 和 Express 的基本网络服务器,用于提供 html 文件和资产

    我正在做一些前端实验 我想要一个非常基本的网络服务器来快速启动一个项目并提供文件 一个index html文件 一些css js img文件 所以我试图用node js和express做一些东西 我已经玩过了 但这次我不想使用渲染引擎 因为
  • 是否有可能拥有 JSON.stringify 保留功能?

    拿这个对象 x key1 xxx key2 function return this key1 如果我这样做 y JSON parse JSON stringify x 然后 y 将返回 key1 xxx 有什么办法可以通过 stringi
  • 在 Matlab 中创建二进制矩阵,报告数量不断增加

    我希望你建议编写一个创建二进制矩阵的 Matlab 代码A尺寸的31x5这样 第一行A is 1 1 1 1 1 从2号到6号A我们有1每行仅一次 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
  • 如何更改android模拟器的日期?

    我需要更改模拟器的日期 你该怎么做 我尝试了开发设置 但他们不让我编辑它 我刚刚尝试过 像在任何其他 Android 设备上一样更改它 打开正常设置 不是开发 并转到日期和时间 取消选中 自动日期和时间 并在下面设置所需的日期
  • 运行时的 Java 编译器

    在我当前的项目中 我需要在运行时编译java代码 在后台处理用户的输入 这与类路径中的tools jar 配合得很好 但是 并非我的程序的所有用户都在其系统上安装了 JDK 其中一些只有 JRE 在这种情况下 运行时没有可用的 java 编
  • 使用Holoviews,如何设置标题?

    我一直在尝试在使用 Holoviews 和 Bokeh 时设置标题 我将 3 个图相互叠加 代码如下所示 opts Curve width 900 height 400 show grid True tools hover finalize
  • 如何删除 d3.behavior.drag().on("drag",...) 事件处理程序[重复]

    这个问题在这里已经有答案了 我将以下内容附加到 svg 元素 var dragger d3 behavior drag origin function d return d on drag this move on dragend drop
  • 选择要从中选择的表,取决于已给定表的列值

    为了我的目的 我必须选择一个表来根据已给定表的列值选择列 首先 我考虑了 CASE 构造 如果 sqlite 可以实现的话 SELECT FROM CASE IF myTable column1 value1 THEN SELECT FRO
  • 如何获取可执行文件的版本?

    萨尔维特 我正在编写一个 vb net 程序来更新我的应用程序的自述文件 我想从其他编译的应用程序中提取版本号 我想从可执行文件中读取版本号 而不是从其未编译的资源中读取版本号 如何在 vb net 中执行此操作而不使用像 reshacke
  • 除了锁定的对象之外,我还可以将对象更改保存到另一个 TR 中吗?

    当我尝试切换到报告源的编辑模式时 会出现一个弹出窗口告诉我 将为用户XXX的以下请求创建一个新任务 还提出了运输请求 但是 我不想在此请求中保存我的更改 而是在另一个现有请求中保存更改 我不知道我的系统中正在实施任何版本控制系统 也不知道如
  • iOS ClipsToBounds YES 和 Shadow?

    我有一个浮动的 UITableView 有圆角和设定的高度 但我也想添加阴影 但我的问题是我需要clipsToBounds打开 这样我的单元格就不会超出浮动的 UITableView 是否有办法在为 UITableView 保持 Clips
  • 使用 androidx DialogFragment 创建 AlertDialog 时按钮样式错误

    这是我的根风格
  • Firefox 3 书签中的 Http Auth

    我正在尝试创建一个书签 用于将 del icio us 书签发布到单独的帐户 我从命令行测试了它 例如 wget O no check certificate https seconduser email protected cdn cgi
  • 如何将 Jaeger 与 Spring WebFlux 结合使用?

    我们正在尝试与 Webflux 进行反应 我们将 Jaegar 与 Istio 结合使用来实现检测目的 Jaeger 很好地理解 Spring MVC 端点 但似乎根本不适用于 WebFlux 我正在寻找让我的 webflux 端点出现在
  • 将变量传递给 R 中的 WinBugs 模型

    我正在使用 R2WinBugs 包 我想将之前在 R 脚本中计算的两个参数传递给模型函数 c0yy lt 0 1 syy lt 0 0001 Model model lt function c0yy syy Likelihood for i
  • 如何使用 rspec 测试路由约束

    我正在开发一个主要用作 API 的应用程序 除了一些次要视图 例如会话 注册 这将是 标准 我喜欢最终确定的方法Railscast 350 API 版本控制 http railscasts com episodes 350 rest api
  • JPA/Hibernate 选择查询返回重复记录

    我有一个表 例如 Instrument 其中包含 ID State 和 User ID 作为列 所以我有这个 JPA 查询来返回所有具有匹配的仪器记录 用户身份 query manager createQuery SELECT instru
  • 在 matplotlib 轴上设置科学限制后调整指数文本

    目前 如果我将 matplotlib y 轴刻度标签设置为科学模式 它会在表单 y 轴顶部给出一个指数1e 5 我想调整这个来阅读r mathregular 10 5 这样就可以很好地打印出来 这是我的示例代码 Create a figur
  • jshell 启动时加载脚本的不同方法

    根据文档 还有在启动时加载脚本的选项 包括一些特殊的预定义选项 这些是使用 startup 标志指定的 传入文件名或以下之一 DEFAULT 加载默认行为 这与根本没有指定的行为相同 JAVASE 默认导入所有 Java SE 包 PRIN
  • FormBuilder 控件导致“表达式在检查后已更改”异常

    我有一个正在通过编程方式实例化的表单DynamicComponentLoader loadIntoLocation 表单代码如下 constructor private builder FormBuilder this editForm b