Firebase AngularFire2-加入成员和用户
我试图在AngularFire2应用程序中列出用户对话,其结构如下: 聊天 使用者 我正在尝试映射和列出聊天,这样我就可以很容易地显示聊天参与者的姓名,并在最后一条消息下面大声吼叫 问题1:此示例与当时的官方推荐略有不同,但我觉得它仍然有效且可扩展。我说得对吗 问题2:如何实际加入成员和用户,在我的聊天列表中拥有Firebase AngularFire2-加入成员和用户,firebase,firebase-realtime-database,angularfire2,Firebase,Firebase Realtime Database,Angularfire2,我试图在AngularFire2应用程序中列出用户对话,其结构如下: 聊天 使用者 我正在尝试映射和列出聊天,这样我就可以很容易地显示聊天参与者的姓名,并在最后一条消息下面大声吼叫 问题1:此示例与当时的官方推荐略有不同,但我觉得它仍然有效且可扩展。我说得对吗 问题2:如何实际加入成员和用户,在我的聊天列表中拥有用户数组 这是我到目前为止所拥有的 // retrieve chats "user1" participates in this.afChatsRef = this.af.databas
用户
数组
这是我到目前为止所拥有的
// retrieve chats "user1" participates in
this.afChatsRef = this.af.database.list(this.datastore(), {
query: {
orderByChild: "/members/user1", // by user id in members
equalTo: true,
}
}).map(chats => {
chats.map(chat => {
// HMMM? WHAT TO DO HERE ?
});
return chats;
});
提前谢谢
更新我还尝试了以下方法,但似乎不太正确(而且我无法访问用户属性)
您希望返回嵌套映射并获取其中的用户。像这样的东西
// retrieve chats "user1" participates in
this.afChatsRef = this.af.database.list(...).map(chats => {
// Note the return!
return chats.map(chat => {
// Avoid side effects by storing members separate from the keys
chat.memberData = {};
// Iterate keys and download members
Object.keys(chat.members||{}).forEach(uid => {
// `users` represents a service to cache and load users on demand
chat.memberData[uid] = users.load(uid);
});
});
return chats;
});
下面是一个使用缓存创建用户服务的好方法:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { AngularFireDatabase } from 'angularfire2/database';
@Injectable()
export class UserProvider {
db: AngularFireDatabase;
users: Map<String, Observable<User>>;
constructor(db: AngularFireDatabase) {
this.db = db;
this.users = new Map();
}
load(userid:string) : Observable<User> {
if( !this.users.has(userid) ) {
this.users.set(userid, this.db.object(`members/${userid}`).valueChanges());
}
return this.users.get(userid);
}
}
export interface User {
name:string;
nick:string;
}
从'@angular/core'导入{Injectable};
从'rxjs/Rx'导入{Observable};
从“angularfire2/database”导入{AngularFireDatabase};
@可注射()
导出类用户提供程序{
db:AngularFire数据库;
用户:地图;
构造函数(db:AngularFireDatabase){
这个.db=db;
this.users=newmap();
}
加载(userid:string):可观察{
如果(!this.users.has(userid)){
this.users.set(userid,this.db.object(`members/${userid}`).valueChanges());
}
返回this.users.get(userid);
}
}
导出接口用户{
名称:字符串;
尼克:绳子;
}
这里是AngularFire2中异步连接的一个示例
this.af.database.list(this.datastore()).map(chats => {
chats.map(chat => {
// chat.users = [];
for (var key in chat.members) {
this.af.database.object("/users/" + key).subscribe(user => {
chat.members[key] = user;
});
}
return chat;
});
console.log(chats);
return chats;
});
// retrieve chats "user1" participates in
this.afChatsRef = this.af.database.list(...).map(chats => {
// Note the return!
return chats.map(chat => {
// Avoid side effects by storing members separate from the keys
chat.memberData = {};
// Iterate keys and download members
Object.keys(chat.members||{}).forEach(uid => {
// `users` represents a service to cache and load users on demand
chat.memberData[uid] = users.load(uid);
});
});
return chats;
});
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { AngularFireDatabase } from 'angularfire2/database';
@Injectable()
export class UserProvider {
db: AngularFireDatabase;
users: Map<String, Observable<User>>;
constructor(db: AngularFireDatabase) {
this.db = db;
this.users = new Map();
}
load(userid:string) : Observable<User> {
if( !this.users.has(userid) ) {
this.users.set(userid, this.db.object(`members/${userid}`).valueChanges());
}
return this.users.get(userid);
}
}
export interface User {
name:string;
nick:string;
}