Spartacus search box 里显示的产品列表数据是从哪里进行搜索的

如下图所示,selector:cx-searchbox

Component 名称:Search-box.component.ts

点击 search bar 之后:

添加 css 类:

在断点停下来的地方,查看搜索结果列表:

抛出 ProductSearch 的 action:

最后调用 ProductSearchConnector 进行搜索:

dispatch 到 adapter:

ProductList Component 里这段代码:


    this.subscription.add(
      combineLatest([this.model$, this.viewMode$])
        .pipe(
          skip(1),
          filter(([model, mode]) => !!model && !!mode)
        )
        .subscribe((model) =>{
    
    
          this.globalMessageService.add(
            {
    
     key: 'sorting.pageViewUpdated' },
            GlobalMessageType.MSG_TYPE_ASSISTIVE,
            500
          );
          console.log('Jerry:', model);
        }
        )
    );
  }

首先,private subscription = new Subscription(); 这行代码声明了一个新的 Subscription 对象。在 RxJS 中,Subscription 对象用于表示可观察对象(Observable)的执行,主要用于取消订阅。

接下来的代码块是 this.subscription.add(),表示将一个新的订阅添加到 subscription 对象中。被添加的订阅是 combineLatest([this.model$, this.viewMode$]) 返回的 Observable 对象的订阅。

combineLatest([this.model$, this.viewMode$]) 是 RxJS 的一个函数,用于将多个 Observable 合并成一个 Observable。当任何一个输入的 Observable 发出值,它就会发出每个输入 Observable 的最新值的数组。在这里,它合并了 this.model$this.viewMode$ 这两个 Observable 对象。

.pipe() 是用于组合多个函数的操作符,它将一个 Observable 转换为另一个 Observable。在这里,它包含了两个操作符:skip(1)filter(([model, mode]) => !!model && !!mode)

skip(1) 会忽略源 Observable 发出的前 1 个值,只对其后发出的值感兴趣。

filter(([model, mode]) => !!model && !!mode) 会过滤掉不满足条件的值。在这里,条件是 modelmode 两个值都存在。如果 modelmode 中有一个不存在(nullundefinedfalse0NaN 或空字符串),过滤器就会忽略这个值。

.subscribe((model) => { ... }) 表示对 Observable 的订阅。订阅就是 Observable 的执行,即开始接收值。在这里,当 modelmode 都存在时,回调函数就会被调用。

回调函数里,this.globalMessageService.add() 是调用 globalMessageServiceadd 方法,添加一个全局消息。console.log('Jerry:', model); 是输出日志,显示 model 的值。

总的来说,这段代码的主要功能是:当 this.model$this.viewMode$ 的值发生变化并且都存在时,添加一个全局消息,并在控制台打印 model 的值。

猜你喜欢

转载自blog.csdn.net/i042416/article/details/131609062
Box
今日推荐