加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – @ ngrx / store订阅商店的一部分,避免检测其他部分的

发布时间:2020-12-17 06:48:39 所属栏目:安全 来源:网络整理
导读:背景 我商店中的一个减速器处理应用程序中选择的内容.这个商店的界面(我们称之为app)可能如下所示: interface IApp { selectedProject: IProject; selectedPart: IPart;} 所以我希望订阅仅在选择了不同的“项目”时执行操作.我写了这样的东西: this.store.
背景

我商店中的一个减速器处理应用程序中选择的内容.这个商店的界面(我们称之为app)可能如下所示:

interface IApp {
    selectedProject: IProject;
    selectedPart: IPart;
}

所以我希望订阅仅在选择了不同的“项目”时执行操作.我写了这样的东西:

this.store.select('app')
    .map((store: IApp) => store.selectedProject)
    .subscribe((project: IProject) => {
        // Stuff happens here
    });

当selectedProject更改时,此函数会执行此操作.但是,当selectedPart更改时,它也会执行此操作.显然,无论地图如何,它都会监听整个应用商店.那讲得通.

我不希望这种情况发生.我只希望我的函数在selectedProject更改时执行.

我知道我可以将selectedProject和selectedPart拆分到不同的商店来解决这个问题.但是,我很快就能找到许多商店.也许这就是它的意图?

还有另外一种方法吗?我可以使用此界面保留商店,并且订阅仅检测商店中selectedProject部分的更改吗?

解决方法

我相信你在寻找 distinctKeyUntilChanged.

this.store.select('app')
  //Only emit when selectedProject has changed
  .distinctUntilKeyChanged(
    //Key to filter on
    'selectedProject',//Optional comparison function if you have a specific way of comparing keys 
    (x,y) => x.projectName === y.projectName)
  .pluck('selectedProject')
  .subscribe((project: IProject) => {});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读