Я получаю сообщение об ошибке при отправке данных в базу данных Firebase в Angular - PullRequest
0 голосов
/ 09 октября 2018

Я работаю с приложением чата на основе Angular-firebase,

  • Я получаю сообщение об ошибке при отправке данных в мой файл службы Angular chat.service.ts
  • Я помещаюошибка, которую я получаю ниже

ChatFormComponent.html: 5 ОШИБКА TypeError: queryFn не является функцией AngularFireDatabase.push ../ node_modules / angularfire2 / database / database.js.AngularFireDatabase.list (database.js: 18) на ChatService.push ../ src / app / services / chat.service.ts.ChatService.getMessages (chat.service.ts: 39) на ChatService.push ../ src / app /services / chat.service.ts.ChatService.sendMessage (chat.service.ts: 29)

  • Я помещаю код компонента, который отправляет данные в файл сервиса ниже

.ts file

import { Component, OnInit } from '@angular/core';
import { ChatService } from '../services/chat.service';

@Component({
  selector: 'app-chat-form',
  templateUrl: './chat-form.component.html',
  styleUrls: ['./chat-form.component.css']
})
export class ChatFormComponent implements OnInit {

message: string;

  constructor( private _chat: ChatService) {}

  send() {
    console.log(this.message);
    this._chat.sendMessage(this.message);
    this.message = '';
  }
}

.html file

<input class="chatInput" [(ngModel)]="message"/>

<button class="chatButton"  (click)=send()>Send</button>
  • вышеуказанный код компонента отправляет данные в службу, которые взаимодействуют с базой данных

сервисный код ->

import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';
import { AngularFireAuth } from 'angularfire2/auth';
import { Observable } from 'rxjs/Observable';
import { AuthService } from '../services/auth.service';
import * as firebase from 'firebase/app';

import { ChatMessage } from '../models/chat-message.model';

@Injectable()
export class ChatService {

  user: firebase.User;
  chatMessages: FirebaseListObservable<ChatMessage[]>;
  chatMessage: ChatMessage;
  userName: Observable<string>;

  constructor( private db: AngularFireDatabase , private afAuth: AngularFireAuth ) { }

getUser() {}

  sendMessage(msg: string) {
    const timestamp = this.getTimeStamp();
    const email =  'biky700@gmail.com';
    this.chatMessages = this.getMessages();
    this.chatMessages.push({
      message: msg,
      timeSent: timestamp,
      userName:  'Anurag Ranjan',
      email: email });
  }

  getMessages(): FirebaseListObservable<ChatMessage[]> {
    // query to create our message feed binding
    return this.db.list('messages', {
      query: {
        limitToLast: 25,
        orderByKey:  true
      }
    });
  }

  getTimeStamp(){}
 }
}

Важно

  • В приведенном выше коде службы вы можете увидеть некоторую часть кода, которая создает привязку к нашему каналу сообщений, код приведен ниже
getMessages(): FirebaseListObservable<ChatMessage[]> {
    return this.db.list('messages', {
      query: {
        limitToLast: 25,
        orderByKey:  true
      }
    });
  }

Когда я нахожу это, я получаю сообщение, приведенное ниже

**

[ts] Аргумент типа '{query: {limitToLast: number;orderByKey: логическое значение;};} 'нельзя назначить параметру типа' QueryFn '.
Литерал объекта может указывать только известные свойства, а запрос' не существует в типе 'QueryFn'.(собственность) orderByKey: логический

**

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Функция getMessage должна быть примерно такой.

getMessages(): Observable<ChatMessage[]> {
    return this.db.list('/messages', ref => 
      let q = ref.limitTolast(25).orderByKey(true);
      return q;
    );
  }

Для получения дополнительной информации, пожалуйста, смотрите это.https://github.com/angular/angularfire2/blob/master/docs/rtdb/querying-lists.md

0 голосов
/ 09 октября 2018

у кого-то, похоже, такая же проблема, как и у вас, на это сообщение ответили: Stackoverflow .

, пожалуйста, попробуйте это:

getMessages(): Observable<ChatMessage[]> {
return this.db.list('/messages', ref => {
  ref.limitTolast(25).orderByKey(true)
});

}

...