我怎样才能强制斯巴达克斯加载模板
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
)来触发加载。不确定这是否全部,但我认为这是一个好的开始(您应该加载布局和插槽数据)。
当主模块未启动(网络组件)时,如何让 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
)来触发加载。不确定这是否全部,但我认为这是一个好的开始(您应该加载布局和插槽数据)。