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

angular – rxjs combineLatest和Anguar2对Observable Arrays的

发布时间:2020-12-17 06:53:43 所属栏目:安全 来源:网络整理
导读:我在应用程序中进行了一些基本的变化检测,我正在苦苦挣扎.我已经在这几天失去了意志!我想知道这里是否有人可以指出我正确的方向. 我有一个包含2个用户列表的组.一个是成员,另一个是主持人. 此方法连接到数据库以获取每个具有$key值的对象列表.现在我想使用
我在应用程序中进行了一些基本的变化检测,我正在苦苦挣扎.我已经在这几天失去了意志!我想知道这里是否有人可以指出我正确的方向.

我有一个包含2个用户列表的组.一个是成员,另一个是主持人.

此方法连接到数据库以获取每个具有$key值的对象列表.现在我想使用这些键来获取每个用户的实际UserData.我尝试了所有的东西并且结合起来最让我看起来唯一可以工作的东西.

因此,两者都调用该函数,我在模板上使用异步管道.

members$= myService.getMemberListByType("blah","members");
moderators$= myService.getMemberListByType("blah","moderators");

我的功能看起来像这样.

private getMemberListByType(groupKey: string,memberType: string) {

    return this.af.database.list(`groups/${groupKey}/${memberType}`)
      .switchMap(userListKeyMap => {

        console.log("UserListKeyMap",memberType,userListKeyMap);

        let usersObservables: Observable<UserData>[] = [];
        userListKeyMap.forEach((object) => {
          usersObservables.push(this.af.database.object(`users/${object.$key}`)
            .map(UserData.fromJSON));
        });

        return Observable.combineLatest(usersObservables);
      });

  }

但是,Angular未检测到此列表的更改,如下所示.假设其他地方使用其他方法删除成员并将其添加到主持人.在这种情况下,成员列表会发出一个空的用户列表[].

我的* ngIf和* ngFor不会检测到这个新的空对象的变化.结果是用户(在模板上)现在是2个列表的一部分,但是根据日志突出显示,此下的数据非常准确.

我觉得当我在一个空数组上组合时,这就是我问题的根源.没有什么能发出……所以Angular如何改变?我不知道如何解决它.在这个“空”用例中是否有另一种combineLatest的替代方案?由于我使用的是异步管道,我需要一些有意义的东西.

有人能够为我的问题发光吗?

谢谢!

更新

我确信问题在于angular2没有检测到空的可观察列表.特别是当Observable Array有一个值时,稍后该值变为空. Angular2将看不到空数组.我目前无法解决这个问题.我的方法是错误的,还是需要注册一个空的可观察列表?

screen of problem

>蓝色=组件的加载状态良好,用户是成员.
>绿色=用户已从成员移至经理/主持人.
>红色=这不存在,为什么它仍然显示?

解决方法

有一个简单的解决方法:

private getMemberListByType(groupKey: string,userListKeyMap);

        let usersObservables: Observable<UserData>[] = [];
        userListKeyMap.forEach((object) => {
          usersObservables.push(this.af.database.object(`users/${object.$key}`)
            .map(UserData.fromJSON));
        });

        return usersObservables.length > 0 ? Observable.combineLatest(usersObservables) : Observable.of([]);
      });
 }

(编辑:李大同)

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

    推荐文章
      热点阅读