首页 > 解决方案 > 延迟加载的覆盖或自定义 CMS 组件

问题描述

我试图在2.1.4版的正在进行的 Spartacus 项目上测试延迟加载的 CMS 组件,但我无法正确显示这些组件。在继续进一步调查之前,我只想检查几件事:

我们在项目中覆盖了许多 OOTB Spartacus CMS 组件,我已经为其中几个定义了延迟加载功能,就像这里描述的那样https://sap.github.io/spartacus-docs/customizing-cms- components/#lazy-loaded-cms-components-code-splitting某些组件的模块内部,这是一个示例: breadcrumb.module.ts 示例在这里 和构建之后,块在那里,从源选项卡也可见,但组件不是'不显示,并且由于缺少模块(例如 CommonModule、RouterModule,基本上是我们在自定义实现中使用的所有内容..)而出现错误,这些模块在相应的模块中声明但由于某种原因根本没有注册。

任何猜测我们应该修复什么以检查此功能是否在我们的架构中工作?

标签: spartacus-storefront

解决方案


我建议坚持“CMS 驱动的特性模块延迟加载”(如下所述:https ://sap.github.io/spartacus-docs/lazy-loading-guide/ ),而不是延迟加载单独的组件(使用component: () => import())因为让它工作更简单。

这个想法是在模块内定义 CMS 映射,然后将延迟加载(包含组件、服务等),而不是延迟加载单独的(和解耦的)组件。然后,在根应用程序中,我们让 Spartacus 知道,当我们要渲染指定的组件时,应该加载哪个功能模块(例如:https ://sap.github.io/spartacus-docs/lazy-loading-guide/#延迟加载模块的配置

使用component: () => import()只会延迟加载组件代码(没有模块,除非在同一个文件中定义),这样的组件将可以访问全局(根)服务等。在某些情况下它仍然有用,但让它工作有点问题不仅仅是基本场景(但这将在 Spartacus 3.x/4.0 中得到改进)。

关于你的问题:

  • 是否可以延迟加载我们已经覆盖的组件,例如 BannerComponent、SearchBoxComponent ...?

是的。此处简要说明:https ://sap.github.io/spartacus-docs/lazy-loading-guide/#wrapping-library-code-in-a-lazy-loaded-module

  • 是否可以在自定义 CMS 组件上应用延迟加载?

是的。

  • 当此功能不起作用时是否有任何限制?也许与其他一些功能相结合?

如上所述。


推荐阅读