SAP Spartacus 如何重定义登录 Login Component

举报
Jerry Wang 发表于 2022/07/20 12:36:09 2022/07/20
【摘要】 首先在一个标准的 Storefront 上,找到该 Component 的 selector 找到其 Component 名称:LoginComponent然后找到该 Component 的路径,位于 feature-libs 下面的 user 模块内:feature-libs\user\account\components\login\login.component.ts在该模块内,找到了...

首先在一个标准的 Storefront 上,找到该 Component 的 selector 找到其 Component 名称:LoginComponent

然后找到该 Component 的路径,位于 feature-libs 下面的 user 模块内:

feature-libs\user\account\components\login\login.component.ts

在该模块内,找到了其与 CMS Component LoginComponent 的一一对应关系:

在我自己的 Storefront 项目的 package-lock.json 文件里,找到了版本号:3.4.3

新建一个 Component,扩展标准的 LoginComponent:

在我的 AppModule 里,将 CMS LoginComponent 映射到我扩展的 ExtLoginComponent 去:

最后运行时的效果:

注意:如果在我的扩展 Component 里,从下列这个路径导入 LoginComponent:

import { LoginComponent } from ‘@spartacus/user/account/components/login/login.component’;

则报错:

ERROR in ./src/app/loginExtension/extLogin.component.ts
Module not found: Error: Can’t resolve ‘@spartacus/user/account/components/login/login.component’ in ‘c:\Code\SPA\strange\mystore\src\app\loginExtension’

正确的路径为:

import { LoginComponent } from ‘@spartacus/storefront’;

需求

如何找到触发该网络请求的准确代码位置?

从 initiator 里查看调用栈上下文,一点头绪也没有。

找到触发该网络请求的控件的 selector:cx-register

在 Storefront TypeScript 源代码里查找不到:

在编译生成的 JavaScript 里搜索 cx-register:找到三处

只有直接查看 SAP Spartacus 源代码:cx-register 对应的 RegisterComponent,定义在 user-profile-components.module.ts 里:

最后找到了 RegisterComponent 里的其他依赖:

比如:

  • userRegister:UserRegisterFacade
  • globalMessageService:GlobalMessageService
  • fb:FormBuilder
  • router:RoutingService

这些依赖,在编译出来的 for 运行时代码里,都能够看见:

这些依赖都是作为另一个 module 被导入。

看不到这些 module 的方法里的 JavaScript 代码?

直接搜索 RegisterComponent,结果太多了有200多个匹配。

试试换成另一个方法:

找到了:

所以结论是,TypeScript 编译成的 JavaScript 源代码,运行时在 Chrome 开发者工具里还是能够找到的。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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