0

有人可以帮忙解决这个问题吗?我正在通过 firebase 制作 CRUD 应用程序,而且我是 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[]”类型的参数。“Item”类型缺少“Item[]”类型的以下属性:length、pop、push、concat 等 26 个。

4

2 回答 2

1

您使用的 AngularFire2 适用于可观察对象。请阅读 AngularFire2 的文档。现在你的问题是 items 是一个可观察的而不是数组,所以你试图将值推送到错误的类型,如果你试图推送到数据库,这不是这样做的方法,你应该再次阅读文档和了解 Angularfire2 的工作原理

于 2019-04-21T20:39:25.160 回答
0

尝试在 ngOnInit() 中分配 Observable。就像是

ngOnInit(){
this.items = this.db.list('items', ref => ref.orderByChild('value'))
}

于 2019-04-21T20:23:22.393 回答