Angular9提交表单报Cannot read property 'sanitize' of null 原Angular8正常
问题原因分析
从报错栈可以定位到问题出在ng-jhipster库的JhiAlertService服务中,核心原因是Angular 9默认启用了IVY编译器,适配Angular 8的旧版本ng-jhipster没有兼容IVY的依赖注入规则,导致DomSanitizer没有被正确注入到JhiAlertService实例中,调用sanitize方法时就抛出了空指针错误。
你的业务代码中配置了全局通知拦截器,会在接口请求成功后自动调用JhiAlertService.success()弹出成功提示,这个拦截器的执行时机早于你业务代码中subscribe的成功回调,所以拦截器内先报错,错误会直接流转到subscribe的错误回调中,自然不会打印Data日志,看起来就像接口请求失败,但实际接口本身是正常的。
解决方案
- 方案1:升级
ng-jhipster到兼容Angular 9的版本ng-jhipster从7.0.0版本开始适配Angular 9和IVY编译器,直接升级依赖即可:npm install ng-jhipster@7 # 若使用yarn则执行 yarn add ng-jhipster@7 - 方案2:临时关闭IVY编译器
如果暂时不想升级依赖,可以在项目根目录的tsconfig.json中添加配置,用Angular 8时代的ViewEngine编译器编译,兼容旧版ng-jhipster:{ "angularCompilerOptions": { "enableIvy": false } } - 方案3:临时验证问题
可以先注释掉notification.interceptor.ts第34行调用JhiAlertService.success()的代码,测试接口请求是否能正常进入成功回调打印Data日志,确认问题根源是否为通知服务导致。
内容的提问来源于stack exchange,提问作者Prasanth
相关产品推荐
相关产品推荐

