Storybook二次打开组件报错:Injector已销毁,求解决方案
Storybook Angular 组件切换后返回报错:Injector 已销毁
问题现象
首次打开任意Story组件时显示正常,但切换至其他组件后返回已打开过的组件时,抛出如下错误:
ERROR Error: NG0205: Injector has already been destroyed. at R3Injector.assertNotDestroyed (core.mjs:7986:1) at R3Injector.get (core.mjs:7893:1) at ChainedInjector.get (core.mjs:12088:1) at lookupTokenUsingModuleInjector (core.mjs:3217:1) at getOrCreateInjectable (core.mjs:3262:1) at NodeInjector.get (core.mjs:3527:1) at ViewContainerRef.createComponent (core.mjs:21300:1) at FormlyConfig.resolveFieldTypeRef (ngx-formly-core.mjs:411:1) at FormlyConfig.getMergedField (ngx-formly-core.mjs:390:1) at CoreExtension.initFieldOptions (ngx-formly-core.mjs:2111:1)
已尝试的无效方案
- 在
preview.js中配置angularLegacyRendering: true,未解决问题。
可行解决方案建议
- 清理Formly相关资源:在使用Formly的组件的
ngOnDestroy钩子中,取消所有Formly相关的订阅、清理动态创建的组件引用,避免组件销毁后仍有代码尝试访问已销毁的注入器。 - 调整Storybook渲染配置:在
.storybook/main.js中禁用Ivy渲染(项目兼容的前提下),配置如下:module.exports = { framework: { name: '@storybook/angular', options: { enableIvy: false }, }, }; - 独立注入器管理:对于依赖Formly的组件,尝试创建组件级的独立注入器,替代全局注入器的依赖,确保组件重建时注入器能正确初始化。
- 升级依赖版本:检查Storybook和ngx-formly的最新稳定版本,升级到修复了注入器生命周期问题的版本组合。
内容的提问来源于stack exchange,提问作者Adam Michalski
相关产品推荐
相关产品推荐

