我怎样才能强制斯巴达克斯加载模板

How can I force Spartacus to load a template

当主模块未启动(网络组件)时,如何让 Spartacus 从后端加载特定模板?

我的用例如下:

我有一个使用加速器构建的站点。我想逐步将它迁移到 Spartacus。首先是页眉,然后是页脚,然后是其余部分(仅从加速器移动到 SPA)。 我的自定义页脚和页眉适用于 Spartacus SPA。为了将它们集成到加速器中,我使用 ngx-build-plus 为页眉和页脚构建了 Web 组件。它们可以工作,但只渲染组件的静态部分,而不渲染 Spartacus 的插槽。我也没有看到对后端的请求。

应用模块:

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    B2cStorefrontModule.withConfig({
      backend: {
        occ: {
          baseUrl: environment.occBaseUrl,
          prefix: environment.occPrefix,
        },
      },
      context: {
        baseSite: ['de'],
        language: ['en'],
        currency: ['EUR'],
        urlParameters: ['baseSite', 'language'],
      },
      i18n: {
        resources: translations,
        chunks: translationChunksConfig,
        fallbackLang: 'en',
      },
      features: {
        level: '2.1',
      },
      breakpoints: {
        xs: 576,
        sm: 768,
        md: 992,
        lg: 1920,
      },
      layoutSlots: {
        WebxHomepageTemplate: {
          slots: [],
        },
      },
    }),
    BrowserTransferStateModule,
    UiHeaderModule,
  ],
  entryComponents: [AppComponent],
})
export class AppModule implements DoBootstrap {
  constructor(private injector: Injector) {}
  ngDoBootstrap(): void {
    const elm = createCustomElement(AppComponent, { injector: this.injector });
    customElements.define('wc-header', elm);
  }
}

AppComponent 模板:

<cx-storefront>
  <ng-template cxOutletRef="header">
    <ui-header></ui-header>
  </ng-template>
</cx-storefront>

大多数与布局加载相关的逻辑都与 CmsPageGuard 内的路由相关联,在您的情况下导航不会发生。

因此,您可以尝试伪造它(在您的组件中进行导航)或尝试手动完成所有步骤。我认为,需要的是设置适当的页面上下文 (RoutingService.getPageContext()) 并调用 CmsService.getPage(或 hasPage)来触发加载。不确定这是否全部,但我认为这是一个好的开始(您应该加载布局和插槽数据)。