javascript - 错误类型错误 : Cannot read property 'push' of null

标签 javascript angular firebase firebase-realtime-database angularfire2

我尝试推送到列表,但发生以下错误:

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)
  }


}

错误:

ERROR TypeError: Cannot read property 'push' of null
at
ProjectService.webpackJsonp.../../../../../src/app/projects/shared/project.service.ts.ProjectService.createItem (project.service.ts:36)
at
ProjectFormComponent.webpackJsonp.../../../../../src/app/projects/project-form/project-form.component.ts.ProjectFormComponent.createItem (project-form.component.ts:20)
at Object.eval [as handleEvent] (ProjectFormComponent.html:8)
at handleEvent (core.es5.js:12047)
at callWithDebugContext (core.es5.js:13508)
at Object.debugHandleEvent [as handleEvent] (core.es5.js:13096)
at dispatchEvent (core.es5.js:8659)
at core.es5.js:9270
at HTMLButtonElement. (platform-browser.es5.js:2668)
at
ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:424)

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

最佳答案

我找到了解决方案:

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

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

关于javascript - 错误类型错误 : Cannot read property 'push' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45040189/

相关文章:

iOS - 如何禁用 Firebase 缓存?

firebase - 如何查找日期晚于的所有记录?

Javascript 搜索延迟并从事件监听器收集输入

javascript - 如何从 MVC 项目中的每个表行获取每个值?

jquery - 如何将 bootstrap 3 添加到基于 Angular2 webpack 的项目中

javascript - 如何在 webpack Angular2 中包含外部 javascript 或 css

javascript - 如何使 Node.js 本地主机公开

javascript - Meteor js 的 GridView

angular - 使用 angular 5 分析 asp.net core 2 (web api)

ios - 当前用户重新登录后 Firebase 无法正常工作