【发布时间】:2018-09-06 15:22:14
【问题描述】:
我正在学习如何按照 youtube 视频系列创建 Angular Firebase 聊天:https://www.youtube.com/watch?v=-j0LVc-zLh0
在这里,我正在开发一个聊天服务(chat.service.ts),如下所示:
import {
Injectable
} from '@angular/core';
import {
AngularFireList, AngularFireDatabase
} from 'angularfire2/database';
import {
AngularFireAuth
} from 'angularfire2/auth';
import {
Observable
} from 'rxjs/Observable';
import {
ChatMessage
} from '../models/chat-message.model';
import {
AuthService
} from '../services/auth.service';
import * as firebase from 'firebase/app';
@Injectable()
export class ChatService {
user: any;
chatMessages: AngularFireList < ChatMessage[]> ;
chatMessage: ChatMessage;
userName: Observable<string>;
constructor(
private db: AngularFireDatabase,
private angularFireAuth: AngularFireAuth
) {
// this.angularFireAuth.authState.subscribe(auth => {
// if (auth !== undefined && auth !== null) {
// this.user = auth;
// }
// })
}
sendMessage(msg: string) {
const timestamp = this.getTimestamp();
// const email = this.user.email;
const email = "ex@ex.com";
this.chatMessages = this.getMessages();
this.chatMessages.push({
message: msg,
timeSent: timestamp,
userName: this.userName,
email: email
});
}
getMessages(): AngularFireList<ChatMessage[]> {
return this.db.list('messages', ref => ref.orderByKey().limitToLast(25)
// console.log("test ok")
)};
getTimestamp() {
const now = new Date();
const date = now.getUTCFullYear() + '/' + (now.getUTCMonth() + 1) + '/' + now.getUTCDate();
const time = now.getUTCHours() + ':' + (now.getUTCMinutes()) + ':' + now.getUTCSeconds();
return (date + ' ' + time);
}
}
在 sendMessage 函数中,当我尝试将收到的消息推送到 ChatMessages[] 时,message: msg 行被标记为错误,并且我在终端中收到以下错误消息。
src/app/services/chat.service.ts(48,4) 中的错误:错误 TS2345: '{ message: string; 类型的参数时间发送:字符串;用户名: 可观察的;电子邮件:字符串; }' 不可分配给参数 'ChatMessage []' 类型。对象字面量只能指定已知 属性,并且“ChatMessage[]”类型中不存在“消息”。
谁能帮我解决这个问题?
【问题讨论】:
-
订阅你的 observable 然后推送
标签: angular firebase firebase-realtime-database