#angular #typescript #firebase-realtime-database #angular6 #angularfire5
#angular #машинопись #firebase-realtime-database #angular6 #angularfire5
Вопрос:
Может кто-нибудь, пожалуйста, помочь это исправить? Я создаю CRUD-приложение через firebase, и я новичок в ts и firebase. Помогите мне, пожалуйста, я работаю над этим несколько дней. Спасибо
Мой ts-файл:
import { Injectable } from '@angular/core';
import { Item } from './item';
import { AngularFireObject, AngularFireList, AngularFireDatabase } from 'angularfire2/database';
import * as firebase from 'firebase';
@Injectable()
export class ItemService {
private basePath: string = '/items';
items: AngularFireList<Item[]> = null;
item: AngularFireObject<Item> = null;
constructor(private db: AngularFireDatabase) { }
getItemsList(query={}): AngularFireList<Item[]> {
this.items = this.db.list('items', ref => ref.orderByChild('value'));
return this.items
}
// Return a single observable item
getItem(key: string): AngularFireObject<Item> {
const itemPath = `${this.basePath}/${key}`;
this.item = this.db.object(itemPath)
return this.item
}
createItem(item: Item): void {
this.items.push(item) <--- here is the error
.catch(error => this.handleError(error))
}
// Update an existing item
updateItem(key: string, value: any): void {
this.items.update(key, value)
.catch(error => this.handleError(error))
}
// Deletes a single item
deleteItem(key: string): void {
this.items.remove(key)
.catch(error => this.handleError(error))
}
// Deletes the entire list of items
deleteAll(): void {
this.items.remove()
.catch(error => this.handleError(error))
}
// Default error handling for all actions
private handleError(error) {
console.log(error)
}
}
Ошибка в CreateItem (), и моя консоль выглядит так
ОШИБКА в src/app/items/shared/item.service.ts(31,19): ошибка TS2345: аргумент типа «Элемент» не может быть присвоен параметру типа «Элемент []». В типе ‘Item’ отсутствуют следующие свойства из типа ‘Item[]’: длина, всплывающее окно, нажатие, объединение и еще 26.
Комментарии:
1. В сообщении сказано все: аргумент типа ‘Item’ не может быть присвоен параметру типа ‘Item[]’. Метод push ожидает элемент [], то есть массив элементов. Но вы передаете элемент в качестве аргумента, то есть один элемент, а не массив.
Ответ №1:
AngularFire2, который вы использовали, работает с наблюдаемыми. пожалуйста, ознакомьтесь с документацией AngularFire2. Теперь ваша проблема в том, что items является наблюдаемым, а не массивом, поэтому вы пытаетесь присвоить значения неправильному типу, также, если вы пытаетесь перейти к базам данных, это не способ сделать это, и снова вам следует прочитать документацию и узнать, как работает Angularfire2
Ответ №2:
Попробуйте назначить наблюдаемое в ngOnInit(). Что-то вроде
ngOnInit(){
this.items = this.db.list('items', ref => ref.orderByChild('value'))
}