使用 Angular 4.4.6 的开发模式下没有 NgForm 错误提供程序

2024-03-14

EDIT:我已经发现是什么导致了这个问题;我现在正在寻找一个解决方案来满足它。

NOTE:此问题发生在开发模式下(即不是生产模式,并且不使用 aot)

我正在使用这里的“更新”解决方案:

https://stackoverflow.com/a/46324043/3164070 https://stackoverflow.com/a/46324043/3164070

解决子组件中的输入未更新表单上的有效标志的问题。它在一个相当简单的测试项目中工作,但是当将其移动到我们的实际项目时,它会抛出以下错误:

core.es5.js:1020 ERROR Error: Uncaught (in promise): Error: No provider for NgForm!
Error: No provider for NgForm!
    at ZoneAwareError (http://192.168.2.34:4200/vendor.bundle.js:153804:33)
    at injectionError (http://192.168.2.34:4200/vendor.bundle.js:1378:90)
    at noProviderError (http://192.168.2.34:4200/vendor.bundle.js:1416:12)
    at ReflectiveInjector_._throwOrNull (http://192.168.2.34:4200/vendor.bundle.js:2858:19)
    at ReflectiveInjector_._getByKeyDefault (http://192.168.2.34:4200/vendor.bundle.js:2897:25)
    at ReflectiveInjector_._getByKey (http://192.168.2.34:4200/vendor.bundle.js:2829:25)
    at ReflectiveInjector_.get (http://192.168.2.34:4200/vendor.bundle.js:2698:21)
    at resolveNgModuleDep (http://192.168.2.34:4200/vendor.bundle.js:9701:25)
    at NgModuleRef_.get (http://192.168.2.34:4200/vendor.bundle.js:10771:16)
    at resolveDep (http://192.168.2.34:4200/vendor.bundle.js:11259:45)
    at _createProviderInstance (http://192.168.2.34:4200/vendor.bundle.js:11102:20)
    at resolveDep (http://192.168.2.34:4200/vendor.bundle.js:11238:56)
    at createClass (http://192.168.2.34:4200/vendor.bundle.js:11129:32)
    at createDirectiveInstance (http://192.168.2.34:4200/vendor.bundle.js:10960:37)
    at createViewNodes (http://192.168.2.34:4200/vendor.bundle.js:12401:53)
    at ZoneAwareError (http://192.168.2.34:4200/vendor.bundle.js:153804:33)
    at injectionError (http://192.168.2.34:4200/vendor.bundle.js:1378:90)
    at noProviderError (http://192.168.2.34:4200/vendor.bundle.js:1416:12)
    at ReflectiveInjector_._throwOrNull (http://192.168.2.34:4200/vendor.bundle.js:2858:19)
    at ReflectiveInjector_._getByKeyDefault (http://192.168.2.34:4200/vendor.bundle.js:2897:25)
    at ReflectiveInjector_._getByKey (http://192.168.2.34:4200/vendor.bundle.js:2829:25)
    at ReflectiveInjector_.get (http://192.168.2.34:4200/vendor.bundle.js:2698:21)
    at resolveNgModuleDep (http://192.168.2.34:4200/vendor.bundle.js:9701:25)
    at NgModuleRef_.get (http://192.168.2.34:4200/vendor.bundle.js:10771:16)
    at resolveDep (http://192.168.2.34:4200/vendor.bundle.js:11259:45)
    at _createProviderInstance (http://192.168.2.34:4200/vendor.bundle.js:11102:20)
    at resolveDep (http://192.168.2.34:4200/vendor.bundle.js:11238:56)
    at createClass (http://192.168.2.34:4200/vendor.bundle.js:11129:32)
    at createDirectiveInstance (http://192.168.2.34:4200/vendor.bundle.js:10960:37)
    at createViewNodes (http://192.168.2.34:4200/vendor.bundle.js:12401:53)
    at resolvePromise (http://192.168.2.34:4200/vendor.bundle.js:153599:31) [angular]
    at resolvePromise (http://192.168.2.34:4200/vendor.bundle.js:153570:17) [angular]
    at http://192.168.2.34:4200/vendor.bundle.js:153647:17 [angular]
    at Object.onInvokeTask (http://192.168.2.34:4200/vendor.bundle.js:4090:33) [angular]
    at ZoneDelegate.invokeTask (http://192.168.2.34:4200/vendor.bundle.js:153284:36) [angular]
    at Zone.runTask (http://192.168.2.34:4200/vendor.bundle.js:153052:47) [<root> => angular]
    at drainMicroTaskQueue (http://192.168.2.34:4200/vendor.bundle.js:153480:35) [<root>]
    at <anonymous> [<root>]

问题是相同的组件可以在不存在于表单上的情况下使用,因此 NgForm 没有提供程序。

在没有表单的情况下,是否有某种方法可以动态使用 viewProviders 成员?


是的,您可以将其提供为null如果没有父母NgForm提供者:

export function controlContainerFactory(controlContainer?: ControlContainer) {
  return controlContainer;
}

...

viewProviders: [ 
  { 
    provide: ControlContainer, 
    useFactory: controlContainerFactory, 
    deps: [[new Optional(), NgForm]] 
             ^^^^^^^^^^
          should do the trick
  } 
]

堆栈闪电战示例 https://stackblitz.com/edit/angular-ee2vhj?file=app/child.component.ts

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

使用 Angular 4.4.6 的开发模式下没有 NgForm 错误提供程序 的相关文章

随机推荐

  • 当用户填写表单时运行 javascript

    我是 Google Apps 脚本新手 需要帮助 我正在努力实现以下目标 在 Google 表单中设置文本框失去焦点的触发器 此事件中的代码将是 获取文本框的值 设置文本框的值 不幸的是 目前 Google Apps 脚本和 Google
  • 不带斜体的 MathJax 字体

    我想用MathJax http www mathjax org使用常规字体 而不是斜体 我尝试加载不同的 STIX 字体 但使用 MathJax 渲染的符号始终转换为斜体 我查过STIX 字体常见问题解答页面 http www stixfo
  • 创建一个html5音频并播放它不起作用

    我想动态创建一个 html5 音频并播放它 代码如下 function playAnotherMusic playUrl var audioElement document createElement audio audioElement
  • 如果出现错误,请停止在 jquery 中提交表单

    这是我的代码 http jsfiddle net Xk38X 6 http jsfiddle net Xk38X 6 register click function if company f val length 0 company f c
  • 如何检测任何类型的用户交互?

    安全问题 我现在不知道这是如何发生的 但这个问题的读者会想到这个问题的解决方案是一种安全威胁 所以请记住 我感兴趣的所有数据都是测量用户进入 活动的时间 就这样 用户做了什么 我是NOT有兴趣 我需要的是非常简单的概念 但我找不到解决方案
  • 发送文件到 Mule 入站端点

    我正在尝试将包含文件和两个输入的表单发送到 Mule 入站端点 我有一个自定义处理器和一个定义如下的流程
  • 如何在ggplot中缩放独立层的颜色?

    我有一个数据集 记录了三座建筑物的能源使用情况 我有一个融化的数据框 可以从钻石组中模仿 data lt melt diamonds c depth table cut color id c cut color 本质上 我有来自三个不同建筑
  • Stripe 订阅取消和重新激活模型的最佳实践

    我正在开发一个应用程序 该应用程序有 Stripe 的每月订阅计划 我正在创建一个客户然后订阅供用户订阅 这对我来说效果很好 但我还没有弄清楚如何使用 Stripe 订阅创建取消流程 我使用了取消订阅按钮stripe subscriptio
  • 目标元素位于其他元素之前

    在我对此进行研究的过程中 我偶然发现这个线程 https stackoverflow com questions 10225364 select specific element before other element 但由于它已有 2
  • 用户完成编辑后如何从 EditText 上移除焦点?

    我的布局上有一个 EditText 用户输入一些文本并点击 完成 键后 我想从中删除闪烁的光标 我搜索了 StackOverflow 并找到了 3 个对我不起作用的答案 闪烁的光标仍然存在 private class MyOnKeyList
  • 虚拟环境下降级Python版本

    关于 TensorFlow 我总是遇到同样的错误 ModuleNotFoundError No module named tensorflow contrib 我实际上使用的是Python版本3 9不过网上看的好像是这个版本3 7是最后一个
  • 从 WHERE 子句中包含 Varying IN 列表的表中进行 SELECT

    我在正在处理的项目中遇到一个问题 我无法给您实际的代码 但我创建了一个可执行的示例代码 如下所示 Here temp and temp id有两张桌子 temp表包含逗号分隔的 id 列表 即VARCHAR2 temp id表包含实际的 i
  • 如何从散列的散列中提取键名?

    我有以下哈希值 HoH flintstones gt husband gt fred pal gt barney jetsons gt husband gt george wife gt jane his boy gt elroy simp
  • phpseclib 给了我一个奇怪的错误

    我试图使用这个 但它只是给了我这个错误 我不知道如何解决这个问题 警告 include once Math BigInteger php 无法打开流 否 这样的文件或目录 home www sfs web statistics public
  • linq .Value 可空对象必须有一个值。如何跳过?

    我有一些 linq 代码 有时null cbo3 ItemsSource empty Union from a in from b in CompleteData select b TourOpID Distinct select new
  • 在Swift中实现UILabel动画效果的最佳方法?

    我对 Swift 动画还很陌生 并且知道如何去做 但想看看其他人会如何做 我正在尝试创建这样的效果 当用户进入搜索栏时 搜索栏的占位符文本会缩小并向上移动到搜索字段上方 并更改为不同的颜色 像这样 http magicus xyz http
  • [String] 的 Swift 扩展?

    我正在尝试编写一个扩展方法 String 看来你不能延长 String 直接 类型 元素 限制为非协议类型 字符串 尽管我遇到了这个技巧 protocol StringType extension String StringType 但我仍
  • 在世界地图上方可视化网络[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在 NodeXL 中有一个网络数据集 我试图在世界地图上可视化它 我的数据集有 具有国家属性的节点 链接 节点之间的未加权连接 我尝
  • 如何在 MATLAB 中迭代 n 维矩阵中的每个元素?

    我有个问题 我需要在 MATLAB 中迭代 n 维矩阵中的每个元素 问题是 我不知道如何对任意数量的维度执行此操作 我知道我可以说 for i 1 size m 1 for j 1 size m 2 for k 1 size m 3 等等
  • 使用 Angular 4.4.6 的开发模式下没有 NgForm 错误提供程序

    EDIT 我已经发现是什么导致了这个问题 我现在正在寻找一个解决方案来满足它 NOTE 此问题发生在开发模式下 即不是生产模式 并且不使用 aot 我正在使用这里的 更新 解决方案 https stackoverflow com a 463