【问题标题】:The pipe 'async' could not be found! in Spartacus Lazy loading of CMS components找不到管道“异步”!在 Spartacus CMS 组件的延迟加载
【发布时间】:2021-09-16 08:29:28
【问题描述】:

我尝试制作 CMS 组件的延迟加载, 但是出现以下错误:

ERROR 错误:找不到管道“异步”!

它适用于 CSR,但不适用于 SSR。

我的应用程序中有 Spartacus 3.2.2Angular 10.2.3

下面是我的代码示例,

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { CustomProductListGuard } from './custom-product-list.guard';

@NgModule({
  imports: [
    CommonModule,
    ConfigModule.withConfig(<CmsConfig>{
      cmsComponents: {
        CMSProductListComponent: {
          component: () => import('./container/custom-product-list.component').then(m => m.CustomProductListComponent),
          guards: [CustomProductListGuard]
        }
      },
    }),
  ]
})
export class CustomProductListModule {
}

请帮我解决这个问题。

谢谢!

【问题讨论】:

  • @PalSingh 我试过这个,但在我的情况下不起作用。我将所有更改检测策略都替换为默认值。但仍然有同样的问题。重启节点后尝试。

标签: angular angular-universal spartacus-storefront


【解决方案1】:

最近我们的团队收到了一张客户的投诉单,他们投诉的问题完全相同。

假设您计划延迟加载一个名为 CustomProductSummaryComponent 的 CMS 组件,该组件的 html 实现中使用了异步管道。该管道在 CommonModule 中实现。

声明此组件为延迟加载的功能模块:

import { CommonModule } from '@angular/common';

@NgModule({
  imports: [
    CommonModule,
    ...
  ],

  providers: [
    provideDefaultConfig(<CmsConfig>{
      cmsComponents: {
        ProductImagesComponent: {
          component: () => import('./custom-product-images.component').then(m => m.CustomProductImagesComponent)
        },
      },
    }),
  ]
})
export class CustomProductImagesModule {}

虽然CommonModule是在feature module中引入的,但是当CMS组件延迟加载时,Angular框架无法自动抓取到需要的CommonModule,这被认为是一个限制。

而解决的办法是,在CustomProductSummaryComponent的实现文件中再次手动添加CustomProductImagesModule的模块定义,以保证在延迟加载该组件时,必要的CommonModule也有机会在自己的上下文中加载。

custom-product-images.component.ts的源码:

import { CommonModule } from '@angular/common';

@Component({
  selector: 'app-product-images',
  templateUrl: './custom-product-images.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class CustomProductImagesComponent {
  ...
}


@NgModule({
  imports: [
    CommonModule,
    RouterModule,
    MediaModule,
    OutletModule,
    CarouselModule
  ],
  declarations:[CustomProductImagesComponent]
})
export class CustomProductImagesModule {}

我们已经测试过了,这个解决方案可以解决这个问题。

最好的问候, 杰瑞

【讨论】:

  • 非常感谢 Jerry,它解决了我的问题。
  • 嗨,Jerry,它使 SSR 闪烁,我们有什么解决方案来解决此更改导致的闪烁问题
猜你喜欢
  • 1970-01-01
  • 2017-11-27
  • 2019-08-06
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
相关资源
最近更新 更多