Javascript 错误类型错误:无法读取属性';推动';空的

Javascript 错误类型错误:无法读取属性';推动';空的,javascript,angular,firebase,firebase-realtime-database,angularfire2,Javascript,Angular,Firebase,Firebase Realtime Database,Angularfire2,我正在尝试推送到列表,出现以下错误: import { Injectable } from '@angular/core'; // import { AngularFire, FirebaseListObservable, FirebaseObjectObservable, AngularFireDatabase } from "angularfire2"; import { AngularFireDatabase, FirebaseListObservable, FirebaseObjectO

我正在尝试推送到列表,出现以下错误:

import { Injectable } from '@angular/core';
// import { AngularFire, FirebaseListObservable, FirebaseObjectObservable, AngularFireDatabase } from "angularfire2";
import { AngularFireDatabase, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database';
import { Project } from './project'

@Injectable()
export class ProjectService {

  private basePath: string = '/projects';

  //items: FirebaseListObservable<Project[]> = null; //  list of objects
  items: FirebaseListObservable<Project[]> = null; //  list of objects
  item: FirebaseObjectObservable<Project> = null; //   single object

  constructor(private db: AngularFireDatabase) {}

  // Return an observable list with optional query
  // You will usually call this from OnInit in a component
  getItemsList(query={}): FirebaseListObservable<Project[]> {
    this.items = this.db.list('/projects', {
      query: query
    });
    return this.items
  }

  // Return a single observable item
  getItem(key: string): FirebaseObjectObservable<Project> {
    const itemPath =  `${this.basePath}/${key}`;
    this.item = this.db.object(itemPath)
    return this.item
  }

  // Create a bramd new item
  createItem(item: Project): void  {
    this.items.push(item)
      .catch(error => this.handleError(error))
  }


  // Update an exisiting 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)
  }


}
从'@angular/core'导入{Injectable};
//从“angularfire2”导入{AngularFire,FirebaseListObservable,FirebaseObjectObservable,AngularFireDatabase};
从“angularfire2/database”导入{AngularFireDatabase,FirebaseListObservable,FirebaseObjectObservable};
从“/Project”导入{Project}
@可注射()
导出类项目服务{
私有基路径:字符串=“/projects”;
//items:FirebaseListObservable=null;//对象列表
items:FirebaseListObservable=null;//对象列表
item:FirebaseObjectObservable=null;//单个对象
构造函数(私有数据库:AngularFireDatabase){}
//返回带有可选查询的可观察列表
//您通常会从组件中的OnInit调用此函数
getItemsList(查询={}):FirebaseListObservable{
this.items=this.db.list(“/projects”{
查询:查询
});
将此邮件退回
}
//返回单个可观察项
getItem(键:字符串):FirebaseObjectObservable{
const itemPath=`${this.basePath}/${key}`;
this.item=this.db.object(itemPath)
返回此项目
}
//创建一个新项目
createItem(项:项目):无效{
此.items.push(项目)
.catch(错误=>此.handleError(错误))
}
//更新现有项目
updateItem(键:字符串,值:任意):void{
此.items.update(键、值)
.catch(错误=>此.handleError(错误))
}
//删除单个项目
deleteItem(键:字符串):无效{
此.items.remove(键)
.catch(错误=>此.handleError(错误))
}
//删除整个项目列表
deleteAll():void{
this.items.remove()
.catch(错误=>此.handleError(错误))
}
//所有操作的默认错误处理
私有句柄错误(错误){
console.log(错误)
}
}
错误:

错误类型错误:无法读取null的属性“push”

ProjectService.webpackJsonp…/../../../../../../src/app/projects/shared/project.service.ts.ProjectService.createItem(project.service.ts:36)

ProjectFormComponent.webpackJsonp…/../../../../../../../src/app/projects/projects/project-form.component.ts.ProjectFormComponent.createItem(project-form.component.ts:20)
在Object.eval[作为handleEvent](ProjectFormComponent.html:8)
在handleEvent(core.es5.js:12047)
在callWithDebugContext(core.es5.js:13508)
在Object.debugHandleEvent[作为handleEvent](core.es5.js:13096)
在dispatchEvent上(core.es5.js:8659)
在core.es5.js:9270
在HTMLButtoneElement。(platformbrowser.es5.js:2668)

ZoneDelegate.webpackJsonp…/../../../../../zone.js/zone.js.ZoneDelegate.invokeTask(zone.js:424)

我已经尝试获取null声明,它会生成另一个未定义的错误。

我找到了一个解决方案:

我在构造函数中启动了列表:

constructor(private db: AngularFireDatabase) {
        this.items = db.list('/projects');
   }

不确定我是否正确,但它不是一个可观察的,因此应该有一个.next而不是.push吗?或者,在调用其他函数时,列表还没有被实例化。我看到您在构造函数中构建了它,但是当调用其他函数时,它不能不完成吗。