Как я могу решить проблему с методом отправки сообщения? - PullRequest
0 голосов
/ 13 февраля 2020

У меня одна проблема с компиляцией кода. Я должен написать веб-приложение, которое будет вести себя в чате. Теперь я написал chat.service, но у меня есть проблема. Почему? Пожалуйста, помогите мне. Фотографии с изображениями chat.service.enter отправляю сюда. введите описание изображения здесь

{Аргумент типа '{message: string; timeSent: строка; userName: Observable; электронная почта: любая; } 'нельзя назначить параметру типа' ChatMessage [] '.}

Также отправьте мой код:

@Injectable()
export class ChatService {
  user: any;
  chatMessages: AngularFireList<ChatMessage[]>;
  chatMessage: ChatMessage;
  userName: Observable<string>;

  constructor(
    // create value for angularFirebase
    private db: AngularFireDatabase,
    private afAuth: AngularFireAuth
  ) {
      this.afAuth.authState.subscribe(auth => { // check the auth user message
        if (auth !== undefined && auth !== null) {
          this.user = auth;
        }
      });
    }
// send message method with get time and get back message
  sendMessage(message: string) {
    const timestamp = this.getTimeStamp();
    const email = this.user.email;
    this.chatMessages = this.getMessages();
    this.chatMessages.push({
      message: message,
      timeSent: timestamp,
      userName: this.userName,
      email: email,
    });
  }

  getMessages(): AngularFireList<ChatMessage[]> {
    return this.db.list('message', ref => ref.orderByKey().limitToLast(25));
  }

  private 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);

   }
}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Проблема возникает из этого фрагмента кода:

this.chatMessages = this.getMessages();
this.chatMessages.push({
  message: message,
  timeSent: timestamp,
  userName: this.userName,
  email: email,
});

В первой строке вы инициализируете chatMessages как AngularFireList<ChatMessage[]>, который является типом, определенным AngularFire2. Затем в следующей строке вы пытаетесь push новый элемент для этого типа, который не является допустимой операцией, поскольку объект не выглядит как действительный ChatMessage. Вы хотите убедиться, что JSON, который вы передаете, является правильным для ChatMessage, или фактически создаете объект ChatMessage и pu sh, который соответствует chatMessages.

0 голосов
/ 13 февраля 2020

Кажется, вы передаете объект в функцию, которая ожидает массив. Судя по предоставленному небольшому фрагменту, вы можете просто обернуть ваши данные в массив, содержащий только этот элемент. Может быть в состоянии заставить код работать. Пожалуйста, посмотрите на предложение @ kurt-hamilton и улучшите свой вопрос

...