哪个@angular/*包是bug的来源?
forms
这是个回归吗?
否
描述
错误抛出:无法读取null的属性('_rawValidators')
这并不能告诉用户问题出在哪里(哪个组件),也不能告诉无效的表单控件名称是什么。在非生产模式下,这种情况处理得更好,但当我们试图调试生产环境中的问题时,不知道如何重现问题,这就无能为力了。
我们将未处理的错误记录到DataDog,当我们收到这个错误时,基本上我们无法采取行动或修复它,因为堆栈跟踪中没有提供有用的信息。
请提供一个最小复现bug的链接
https://stackblitz.com/edit/stackblitz-starters-cgg4uh?file=src%2Fapp%2Fforms%2Fforms.component.html
请提供您看到的异常或错误
TypeError: Cannot read properties of null (reading '_rawValidators')
at getControlValidators (@angular_forms.js?v=a1e73860:721:18)
at setUpValidators (@angular_forms.js?v=a1e73860:2545:22)
at setUpControl (@angular_forms.js?v=a1e73860:2500:3)
at _FormGroupDirective.addControl (@angular_forms.js?v=a1e73860:4087:5)
at _FormControlName._setUpControl (@angular_forms.js?v=a1e73860:4611:39)
at _FormControlName.ngOnChanges (@angular_forms.js?v=a1e73860:4560:12)
at _FormControlName.rememberChangeHistoryAndInvokeOnChangesHook (chunk-H7PDWKI7.js?v=a1e73860:5775:10)
at callHookInternal (chunk-H7PDWKI7.js?v=a1e73860:6341:10)
at callHook (chunk-H7PDWKI7.js?v=a1e73860:6359:5)
at callHooks (chunk-H7PDWKI7.js?v=a1e73860:6330:9)
请提供您发现此bug的环境(运行ng version
)
Angular CLI: 17.3.8
Node: 18.20.3
Package Manager: npm 10.2.3
OS: linux x64
Angular: 17.3.12
... animations, common, compiler, compiler-cli, core, forms
... platform-browser, router
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1703.8
@angular-devkit/build-angular 17.3.8
@angular-devkit/core 17.3.8
@angular-devkit/schematics 17.3.8
@angular/cli 17.3.8
@schematics/angular 17.3.8
rxjs 7.8.1
typescript 5.3.3
zone.js 0.14.8
还有其他信息吗?
- 无响应*
8条答案
按热度按时间jutyujz01#
看起来这个问题已经在过去被报告过了:#48379
但是那个问题已经关闭了。我创建了一个stackblitz来重现这个问题。
5ktev3wc2#
这是在生产模式开启时不会抛出的有用错误(取自部署的JavaScript):
qjp7pelc3#
formControlName (
c
) 不存在是故意的吗?您的定义是
kknvjkwl4#
是的,这就是问题所在,当它遇到一个错误的表单控件名称时,会抛出一个错误,但没有提供任何信息。
在我们的情况下,我们的表单控件是从数据库信息动态创建的。在我们的DataDog崩溃日志中,我们记录了这个错误,但问题在于我们没有任何关于使用了哪个表单控件名称、用户在应用程序的哪个部分等的信息。不幸的是,这意味着在没有更多信息的情况下,我们无法解决这个问题。
erhoui1w5#
这是一个仅在开发模式下抛出的诊断错误链接:
angular/packages/forms/src/directives/shared.ts
第70行 d73a374
| | if(typeofngDevMode==='undefined'||ngDevMode){ |
rqenqsqc6#
我明白了,一个问题是我们在生产环境中去除了错误信息,只记录错误代码,所以这对你帮助不大。我们只在错误模式下记录问题,以使生产包尽可能小。
ix0qys7i7#
是的,就是这样。这不是Angular的bug,我只是在问题发生时请求帮助来找到问题的根源。如果能知 prop 有
formControlName
指令的模板的组件并传递了错误的值(或者表单控件可能尚未通过动态创建的表单创建时的计时问题),那将会非常有帮助。6ss1mwsb8#
任何可能对调试有用的信息都故意设计在生产构建中被移除,以免影响捆绑包的大小。因此,我认为错误消息无法在生产环境中得到改进。