Angular 变换可观测<;任何>;可观察<;任何[]>;
iam正在使用firebase实时数据库开发ionic3应用程序。所以我用。该应用程序允许用户存储链接。链接由url和相关标记组成。以下是我的数据库结构的外观: 所有链接都位于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}}&
/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可观察的内容提前多谢 这就是你在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中尝试自己,并为您提供一个有效的答案。