关于 SAP 电商云 Spartacus UI 里 Router 模块的 forRoot 方法
默认路由的配置数据定义在 default-routing-config.ts 文件内: 一些例子: login: { paths: ['login'], protected: false, authFlow: true, }, register: { paths: ['login/register'],
Angular forRoot 方法的使用场合介绍
forRoot() 方法返回一个 NgModule 及其提供者 Providers 依赖项。 NgModule forRoot() 约定对 Angular 初学者来说是一个奇怪的约定:命名说明了如何使用它,但没有说明这样做的使用场景,即为什么需要以这种方式导入 NgModule。 一言以蔽之,forRoot 同单例服务相关。当 Angular 服务在某个时间点被加载到页面时,所有应用程序里对该
从 RouterModule.forRoot 方法说起
每个 Angular 开发人员在学习路由设计时,都遇到过如下的代码: import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: '', redirectTo: '/index', pathMatch: '
从 Angular Component 和 Directive 的实例化,谈谈 Angular forRoot 方法的命令由来
同 Angular service 的单例特性不同,Angular 组件和指令通常会被多次实例化,比如 HTML markup 中每出现一次 Component 的 selector,就会触发 Component 的一次实例化。 这些 Component 和 Directive 的范围,仅限于导入它们的 NgModule,以防止命名冲突,例如两个组件可能具有相同的选择器。正是由于 Angular
如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版
正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大部分,分别进行介绍。本文是本教程的文章目录。 作者简介Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SA
SAP ABAP OData 服务里 EntityType 和 EntitySet 的区别试读版
正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大部分,分别进行介绍。本文是本教程的文章目录。 作者简介Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SA
如何在 SAP Spartacus 中编写 ASM-Compatible 的代码
要编写与 ASM 兼容的代码,开发人员需要使用 UserIdService 中的 takeUserId() 函数来确定 OCC 调用中使用的 userId。 这通常在一个服务中完成,该服务调度一个在有效负载中包含 userId 的 Action. 在 Spartacus 官方支持 ASM 场景之前,在代表经过身份验证的用户发送的请求中,OCC userId 是特殊的 current OCC 用户
为什么电商云产品需要 Assisted Service Module (ASM) 模块的支持
SAP Commerce Assisted Service Module (ASM) 使组织能够在所有渠道中提供全面的引导式采购流程。 ASM 与 SAP Commerce B2C Accelerator 店面兼容,并且与店面的响应式设计完全兼容。ASM 与 SAP Commerce Telco 和 B2B Accelerator 店面兼容。 但是,SAP 建议在 B2B 加速器中禁用客户创
创建第一个 Cypress 应用后使用命令行 npx Cypress open 报错的原因分析
大多数测试工具(如 Selenium)通过在浏览器外部运行并通过网络执行远程命令来运行。Cypress 正好相反。 Cypress 在与 Web 应用程序相同的运行循环(run loop)中执行。 Cypress 背后是一个 Node 服务器进程。 Cypress 和 Node 进程彼此不断通信、同步和执行任务。访问这两个部分(也就是对应的前后台操作)使我们能够实时响应 Web 应用程序的事件,
一个 Angular 开发人员对腾讯 Cloud Studio 使用后的体验报告
笔者是一位 Angular 开发工程师,之前尝试过国外一款著名的在线编辑器,StackBlitz. 这款编辑器功能强大,但因为服务器在国外,所以我平时访问的时候,由于网络的原因,在编辑代码和本地运行编译好的 Angular 应用时,经常感觉到延迟,影响了用户体验。 下图是 StackBlitz 在线编辑器的 home 界面: 这次听说腾讯推出了自己的 Cloud Studio 之后,非常激
SAP 电商云 Assisted Service Module (ASM) 功能模块讲解
使用 ASM,客户销售和服务代表可以: 查找客户的帐户和会话,或匿名购物车将客户分配到匿名购物车(反之亦然)代表客户创建新客户帐户在产品目录、购物车和结账流程中提供销售支持,将产品添加到购物车并为客户结账在 My Account 区域内为客户提供服务和支持对于 B2B 加速器,为 My Company 区域内的客户提供支持 SAP Commerce ASM 使员工能够提供实时的客户销售
SAP 电商云 Spartacus UI 里的 ASM 模块启用的前置条件
辅助服务模块 (ASM) 使客户服务人员能够使用 Spartacus 店面提供实时客户销售和服务支持。 Spartacus 中的辅助服务模块功能需要 SAP Commerce Cloud 版本 1905.5 或更高版本。 在 assistedservicewebservices 端点中启用 CORS 需要最低版本 1905.5。 Spartacus 中的 ASM 需要以下 SAP Commer
如何在 SAP Spartacus 中编写 ASM-Compatible 的代码
要编写与 ASM 兼容的代码,开发人员需要使用 UserIdService 中的 takeUserId() 函数来确定 OCC 调用中使用的 userId。 这通常在一个服务中完成,该服务调度一个在有效负载中包含 userId 的 Action. 在 Spartacus 官方支持 ASM 场景之前,在代表经过身份验证的用户发送的请求中,OCC userId 是特殊的 current OCC 用户
为什么电商云产品需要 Assisted Service Module (ASM) 模块的支持
SAP Commerce Assisted Service Module (ASM) 使组织能够在所有渠道中提供全面的引导式采购流程。 ASM 与 SAP Commerce B2C Accelerator 店面兼容,并且与店面的响应式设计完全兼容。ASM 与 SAP Commerce Telco 和 B2B Accelerator 店面兼容。 但是,SAP 建议在 B2B 加速器中禁用客户创
创建第一个 Cypress 应用后使用命令行 npx Cypress open 报错的原因分析
大多数测试工具(如 Selenium)通过在浏览器外部运行并通过网络执行远程命令来运行。Cypress 正好相反。 Cypress 在与 Web 应用程序相同的运行循环(run loop)中执行。 Cypress 背后是一个 Node 服务器进程。 Cypress 和 Node 进程彼此不断通信、同步和执行任务。访问这两个部分(也就是对应的前后台操作)使我们能够实时响应 Web 应用程序的事件,
Promise.all API 的出错处理
Promise.all使用场景:假设我们希望许多 Promise 并行执行,并等待它们都准备好。 一个实际例子是:并行下载多个 URL,并在这些 URL 全部下载完成后,再进行后续的业务逻辑处理。 语法: let promise = Promise.all(iterable); Promise.all 接受一个 iterable 对象(通常是一组 Promise)并返回一个新的 Pro
Promise 静态 API 的使用方法
Promise.all使用场景:假设我们希望许多 Promise 并行执行,并等待它们都准备好。 一个实际例子是:并行下载多个 URL,并在这些 URL 全部下载完成后,再进行后续的业务逻辑处理。 语法: let promise = Promise.all(iterable); Promise.all 接受一个 iterable 对象(通常是一组 Promise)并返回一个新的 Pro
SAP 电商云 Spartacus UI 去除 Checkout 页面 header 和 footer 区域的几种方法介绍
1 distraction-free checkout如何移除 checkout 页面的 footer 和 header 方法1 - 把 checkout CMS page 的header 和 footer slot 删除即可 可以直接在 Backoffice 或者 SmartEdit 里手动删除,也可以创建 Impex 删除。这样 Hybris Re-initialize 的时候,这些 Im
将使用回调函数作为参数的函数改造为返回 Promise 的一个具体例子
我开发了一个函数 loadScript,可以动态加载指定的本地 JavaScript 文件。源代码如下: function loadScript(src, callback) { let script = document.createElement('script'); script.src = src; script.onload = () =>
JavaScript 异步函数的 Promisification 处理
Promisification 是一个很长的词,表示一个编程范式的转变,即将接受回调的函数转换为一个返回类型为 Promise 的函数。 我们现实的开发项目中经常需要这种转换,因为许多函数和库都是基于回调的,但是 Promise 更方便,所以对它们进行 Promisification 处理是有意义的。 下面是一个简单的例子。 function loadScript(src, callback