SAP Spartacus 标准的 Effects 实现的注入原理

举报
汪子熙 发表于 2022/07/31 10:56:09 2022/07/31
【摘要】 先研究标准的 effect 为何可以被 call 到:在 ProductReviewsEffects 构造函数里设置断点:发现在访问首页时,断点即触发。为什么 AppModule 启动时,就要加载 ProductReviewEffect?单击 AppModule,就跳转到我自定义的 AppModule 文件了,但是该文件里并没有 ProductReviewEffect:这个 EffectFe...

先研究标准的 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),

解决方案

最后,生效了:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。