Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 变换可观测<;任何>;可观察<;任何[]>;_Angular_Rxjs_Observable_Angularfire2_Ngfor - Fatal编程技术网

Angular 变换可观测<;任何>;可观察<;任何[]>;

Angular 变换可观测<;任何>;可观察<;任何[]>;,angular,rxjs,observable,angularfire2,ngfor,Angular,Rxjs,Observable,Angularfire2,Ngfor,iam正在使用firebase实时数据库开发ionic3应用程序。所以我用。该应用程序允许用户存储链接。链接由url和相关标记组成。以下是我的数据库结构的外观: 所有链接都位于/links/。 对于用户,链接存储为引用键,位于/users/this.user/links/ 在视图中,我想列出某个用户的所有链接。 模板详细信息: <ion-item *ngFor="let item of items | async"> <h3>{{item.url}}&

iam正在使用firebase实时数据库开发ionic3应用程序。所以我用。该应用程序允许用户存储链接。链接由url和相关标记组成。以下是我的数据库结构的外观:

所有链接都位于
/links/
。 对于用户,链接存储为引用键,位于
/users/this.user/links/

在视图中,我想列出某个用户的所有链接。 模板详细信息:

   <ion-item *ngFor="let item of items | async">
      <h3>{{item.url}}</h3>
      <!-- TODO: add tags and other meta information -->
    </ion-item>
这样,我的最终可观测对象将发射用户链接对象。组件订阅中的
console.log(res)
显示了所需的结果:

但由于我发射链接对象,Angular告诉我ngFor只支持iterables:

最后,我的问题是:

  • 如何将可观察的
    转换为模板中ngFor可观察的内容

  • 有没有更好的方法来使用rxjs操作符进行我想要的过滤


  • 提前多谢

    这就是你在Rx中需要做的事情。我假设您希望除去响应中的所有数据,只获取标记和url

    const linkFromRaw = linkList => linkList
        .map(linkResponse => new Link(linkResponse.url, linkResponse.tags);
    
    const linkToDetail = link => this.db.list('/links/' + link.$key))
    
    this.items = this.db.list('/users/' + this.user + '/links/')
      .flatMap( links => Observable.forkJoin(links.map(linkToDetail))
         .reduce(
           (finalResponse, linkResponseArr) =>[...finalResponse, ...linkResponseArr],
           []
         )
      )
      .map(links => links.map(linkFromRaw));
    

    这就是你在Rx中需要做的事情。我假设您希望除去响应中的所有数据,只获取标记和url

    const linkFromRaw = linkList => linkList
        .map(linkResponse => new Link(linkResponse.url, linkResponse.tags);
    
    const linkToDetail = link => this.db.list('/links/' + link.$key))
    
    this.items = this.db.list('/users/' + this.user + '/links/')
      .flatMap( links => Observable.forkJoin(links.map(linkToDetail))
         .reduce(
           (finalResponse, linkResponseArr) =>[...finalResponse, ...linkResponseArr],
           []
         )
      )
      .map(links => links.map(linkFromRaw));
    

    当完成发射项目时,可观察对象是否完成?您返回的是一个
    链接
    对象。要迭代哪个数组?是不是
    标签
    ?CozyAzure:我想要一个链接列表,每个链接都由它的url和标签组成。因此,我构建Link对象以在模板中提供我的ngFor@ThinkingMedia我不希望观察对象完成,因为我已连接到实时数据库,如果添加了新链接,我的视图也必须更新。观察对象完成发射项目后是否完成?您正在返回一个
    链接
    对象。要迭代哪个数组?是不是
    标签
    ?CozyAzure:我想要一个链接列表,每个链接都由它的url和标签组成。因此,我构建Link对象以在模板中提供我的ngFor@ThinkingMedia我不希望可观察到的内容结束,因为我连接到实时数据库,如果添加了新链接,我的视图也必须更新。给定
    /users/this.user/links/
    中的两个链接引用,第一个平面图会发出
    [Object,Object]
    ,每个平面图由
    $value:true,$key:'linkReferenceKey'
    组成,我想这是有意的,但是第二个平面图发出一个空数组
    []
    。所以map没有收到任何东西。忘记了一句话,你现在能用更新的代码试试吗?这个解决方案和我上面的解决方案一样,但是更干净。谢谢你。
    toArray()
    是将我的可观察对象从
    Link
    转换为
    Link[]
    所需的全部。但实际的问题是
    toArray()
    不会发出任何东西。在
    toArray()前面添加
    take(3)
    效果非常好,但仅适用于3个元素的参数。因为我不知道会有多少物品到达,我如何才能实现
    toArray()
    的发射?我有一个疑问,它将如何工作。谢谢你,现在我明白这行不通了。我会更新答案,让它工作。你能试试,如果这个工作。如果它不起作用,我将在plnkr中尝试自己,并为您提供一个有效的答案。给定
    /users/this.user/links/
    中的两个链接引用,第一个平面图将发出
    [Object,Object]
    ,其中每个由
    $value:true,$key:'linkReferenceKey'
    组成,我猜这是有意的,但是第二个平面图发出一个空数组
    []
    。所以map没有收到任何东西。忘记了一句话,你现在能用更新的代码试试吗?这个解决方案和我上面的解决方案一样,但是更干净。谢谢你。
    toArray()
    是将我的可观察对象从
    Link
    转换为
    Link[]
    所需的全部。但实际的问题是
    toArray()
    不会发出任何东西。在
    toArray()前面添加
    take(3)
    效果非常好,但仅适用于3个元素的参数。因为我不知道会有多少物品到达,我如何才能实现
    toArray()
    的发射?我有一个疑问,它将如何工作。谢谢你,现在我明白这行不通了。我会更新答案,让它工作。你能试试,如果这个工作。如果它不起作用,我将在plnkr中尝试自己,并为您提供一个有效的答案。