2017-07-11 45 views
1

我試圖推到一個列表的特性「推」和下面的錯誤發生:錯誤類型錯誤:無法讀取空

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聲明,它會產生另一個未定義的錯誤。

+1

不知道如果我正確與否,而不是它可觀察到的,因此應該有.next而不是.push? 或者它可能是該列表在調用其他函數時未被實例化。我看到你在構造函數中構建它,但是在調用其他函數時無法完成它。 –

回答

0

我已經找到了解決辦法:

我開始在構造函數列表:

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