先研究标准的 effect 为何可以被 call 到:在 ProductReviewsEffects 构造函数里设置断点:

发现在访问首页时,断点即触发。

为什么 AppModule 启动时,就要加载 ProductReviewEffect?

单击 AppModule,就跳转到我自定义的 AppModule 文件了,但是该文件里并没有 ProductReviewEffect:

这个 EffectFeatureModule 是标准框架的实现:

Spartacus 所有标准的 Effects 实例,都是在下列代码 ngrx-effects.js 里实例化的:

function createEffects(injector, effectGroups, userProvidedEffectGroups) {/** @type {?} */const mergedEffects = [];for (let effectGroup of effectGroups) {mergedEffects.push(...effectGroup);}for (let userProvidedEffectGroup of userProvidedEffectGroups) {mergedEffects.push(...userProvidedEffectGroup);}return createEffectInstances(injector, mergedEffects);
}

问题就是,对于 AppModule 而言,这些 Effects 是从哪里解析出来的?

看一下标准的 Effects 是怎么做的?

export const effects: any[] = [ProductsSearchEffects,ProductEffects,ProductReviewsEffects,ProductReferencesEffects,
];
EffectsModule.forFeature(effects),

解决方案

最后,生效了:

更多Jerry的原创文章,尽在:“汪子熙”:

SAP Spartacus 标准的 Effects 实现的注入原理相关推荐

  1. SAP Spartacus 标准类型的字段扩展 - type augmentation

    The models that are most frequently customized are currently placed in @spartacus/core. The followin ...

  2. SAP Spartacus B2B 页面 Disable 按钮的显示原理

    SAP Spartacus B2B 页面 disable 按钮如下图所示. 这个高亮的 disable 按钮,和左边相邻的 Edit 按钮,实现位于不同的 Component. disable 按钮有 ...

  3. SAP Spartacus B2B页面Budget页面的设计原理

    打开SAP Spartacus My Company菜单,第一个banner即为Budgets页面的入口: http://localhost:4200/powertools-spa/en/USD/or ...

  4. 使用ConfigModule.withConfig替换SAP Spartacus标准Component

    思路为如下示意图: 新建一个Component,将自定义UI放在里面: 在app module里,使用如下代码,将CMS Component的SimpleResponsiveBannerCompone ...

  5. SAP Spartacus breakpoint服务中platformID的注入逻辑

    @Inject(PLATFORM_ID) protected platform: any 这个PLATFORM_ID来自@angular/core: 在platform-browser.js里能查看到 ...

  6. SAP Spartacus B2B页面内容的动态注入

    以Units-detail.component.html为例: cx-org-card的selector里使用ng-content定义了允许动态内容注入的注入点: <div class=&quo ...

  7. SAP Spartacus Org Unit明细页面的设计原理

    该页面分三部分组成. 其中蓝色和绿色两个区域的实现如下:两个section标签页: section是HTML标准的标签之一,每个标签通过h1到h6不等的heading标签标识. 运行时渲染的HTML原 ...

  8. SAP Spartacus B2B List里的listData$设计原理

    UI components do not store response data from observables locally, which means destroy logic can be ...

  9. SAP Spartacus里的HTTPErrorInterceptor的单元测试设计原理

    测试UnKnownErrorHandler是否能正确 处理UnknownError这个状态: 这个handler是import进来的: 调用经过TestBed.inject注入后的http: 执行su ...

最新文章

  1. 大新闻!HTC旗舰手机已原生支持BCH
  2. Google Chrome 悄悄升级 WebGL 2.0 标准
  3. mysql传参数 和 区别_mybatis中#{}和${}传参方式的区别
  4. AD16 SCH原理图打开正常,PCB图纸打开为空白或仍是上一个界面的解决方法
  5. 网页类型定义DOCTYPE
  6. 试驾Marvel R :传统车企认真起来,就没新势力什么事了
  7. C++_类和对象_C++多态_多态的原理剖析---C++语言工作笔记070
  8. 深度神经进化大有可为?Uber详解如何用它优化强化学习 | 5篇论文
  9. aidl使用_Android-Service学习鸭-入门实践-远程服务(bindService方式-AIDL)
  10. c语言 int (*p)[5] 类型分析
  11. CMD恶搞命令集,假装自己是黑客
  12. 易语言解析html实例,易语言解析JSON教程
  13. HDU 6070 Dirt Ratio
  14. hub设备_「网络安全」网络设备篇(9)——集线器Hub
  15. 客户个性分析 聚类 大数据
  16. jsp中获取不到servlet中的ArrayList
  17. 卸载win10自带应用
  18. 161、锐捷交换机如何配置ssh管理
  19. 利用swagger组件测试excel下载,打开文件乱码。
  20. linux-mariadb

热门文章

  1. VSFTP服务--Linux学习笔记
  2. Android 网络知识必知必会
  3. servlet请求和响应的过程
  4. 日志服务客户端(logtail)异常检测工具
  5. 【uva 1617】Laptop(算法效率--贪心,2种理解)
  6. DRBD的安装与配置
  7. uva 753 A Plug for UNIX
  8. Appium+python自动化8-Appium Python API
  9. Python3 练习笔记五
  10. 【刷题】LOJ 6011 「网络流 24 题」运输问题