首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改Angular2中的可观测性使BehaviorSubject着火

修改Angular2中的可观测性使BehaviorSubject着火
EN

Stack Overflow用户
提问于 2016-12-08 15:45:01
回答 1查看 342关注 0票数 0

在下面的按钮中,当您单击Select时,一个可观察的数据被填充到一个数据数组中。第一项以黄色高亮显示,因为它有一个属性设置为selected。当焦点放在输入框上时,您可以在列表中向下箭头。问题是,BehaviorSubject每次都会从服务器上触发和获取数据列表。如何在每次不触发searchTerms BehaviorSubject的情况下修改所选属性?市场中的searchInputArrowKeyPressed方法-search.Component.ts文件是处理箭头键的地方。

代码语言:javascript
复制
public searchInputArrowKeyPressed(event): void {
    this.markets = this.markets
        .map((markets: Market[]) => {
            for(let market of markets) {
                if(market.selected) {
                    if(event === 'down' && markets.indexOf(market) < markets.length) {
                        markets[markets.indexOf(market) + 1].selected = true;
                    }
                    if(event === 'up' && markets.indexOf(market) > 0) {
                        markets[markets.indexOf(market) - 1].selected = true;
                    }
                    market.selected = false;
                    return markets;
                }
            }
        });
}

https://plnkr.co/edit/TBYb5QBau9Vmz8PqQpCl?p=preview

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-09 08:55:23

我同意@n00dl3,重新分配流看起来不自然。我修改了您的柱塞,使每个事件(数据、搜索、上下和输入)都有自己的流。例如:

代码语言:javascript
复制
public searchInputArrowKeyPressed(event): void {
    this.upDownEvents.next(event);
}

数据的修改是通过在数据流中推送更新的数组来完成的。

代码语言:javascript
复制
    this.upDownEvents
      .withLatestFrom(this.markets)
      .subscribe(([event, markets]) => {
          for(let market of markets) {
              if(market.selected) {
                  // change selected

                  this.markets.next(markets);
                  return;
              }
          }
      });

拜托,看这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41043355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档