不同组件的Angular Firebase服务属性已实例化/null

不同组件的Angular Firebase服务属性已实例化/null,angular,typescript,firebase,Angular,Typescript,Firebase,我有一个使用Firebase的角度服务。该服务由多个组件使用。当一个组件使用该服务时(dashboard.component.ts在onSubmit()中使用该服务),它会获取数据并将其推送到Firebase。当另一个组件使用它时(student-ordered-Guarders.component.ts也在onSubmit中使用它),下面代码中的护送列表变量在NewCoarder()中使用时未实例化,未定义 服务代码 import { Injectable, } from '@angular/

我有一个使用Firebase的角度服务。该服务由多个组件使用。当一个组件使用该服务时(dashboard.component.ts在onSubmit()中使用该服务),它会获取数据并将其推送到Firebase。当另一个组件使用它时(student-ordered-Guarders.component.ts也在onSubmit中使用它),下面代码中的护送列表变量在NewCoarder()中使用时未实例化,未定义

服务代码

import { Injectable, } from '@angular/core';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
import { Escort } from '../model/escort.model';

@Injectable()
export class EscortService {

  escortList : AngularFireList<any>;
  selectedEscort : Escort = new Escort();

  constructor(private firebase : AngularFireDatabase) { }

  getData(){
    this.escortList = this.firebase.list('something');
    return this.escortList;
  }

  newEscort(escort : Escort){

    if(escort.driver == 'No driver yet' || escort.driver == null)
        escort.status = "Unassigned";
    else
        escort.status = "Assigned";


      if(this.escortList == null)
        console.log("escortList was null");

        this.escortList.push({
            driver : escort.driver,
            pickup : escort.pickup,
            dropoff : escort.dropoff,
            passengers : escort.passengers,
            no_show : false,
            status : escort.status,
            created : Date.now(),
            finished : null
        });
    }
学生-订购-护送.component.ts

import { Component, OnInit } from '@angular/core';
import * as Chartist from 'chartist';
import { FormsModule }   from '@angular/forms';
import { NgForm } from '@angular/forms';
import { EscortService } from '../services/escort.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
declare var $:any;
declare var google: any;

@Component({
    selector: 'dashboard-cmp',
    moduleId: module.id,
    templateUrl: 'dashboard.component.html',
    providers: [EscortService]
})

export class DashboardComponent implements OnInit{

    constructor(private escortService : EscortService, private firebase : AngularFireDatabase) { }

onSubmit(escortForm: NgForm){
       if(escortForm.value.$key == null)
           this.escortService.newEscort(escortForm.value);
       else
           this.escortService.updateEscort(escortForm.value.$key, escortForm.value);
           this.resetForm(escortForm);
    }
}
import { Component, OnInit } from '@angular/core';
import { FormsModule }   from '@angular/forms';
import { NgForm } from '@angular/forms';
import { EscortService } from '../../services/escort.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';

@Component({
  selector: 'app-student-ordered-escort',
  templateUrl: './student-ordered-escort.component.html',
  styleUrls: ['./student-ordered-escort.component.scss'],
  providers: [EscortService]
})
export class StudentOrderedEscortComponent implements OnInit {

  constructor(private escortService : EscortService, private firebase : AngularFireDatabase) { }

  ngOnInit() {
  }

onSubmit(escortForm: NgForm){
        this.escortService.newEscort(escortForm.value);
    }
}
@Component({
    selector: 'dashboard-cmp',
    moduleId: module.id,
    templateUrl: 'dashboard.component.html',
    providers: [EscortService] // Delete this
})
@Component({
  selector: 'app-student-ordered-escort',
  templateUrl: './student-ordered-escort.component.html',
  styleUrls: ['./student-ordered-escort.component.scss'],
  providers: [EscortService] //Delete this
})

您在2个组件中提供服务,这将创建2个服务实例,每个组件使用不同的实例。 因此,请将您的护送服务移至AppModule

dashboard.component.ts

import { Component, OnInit } from '@angular/core';
import * as Chartist from 'chartist';
import { FormsModule }   from '@angular/forms';
import { NgForm } from '@angular/forms';
import { EscortService } from '../services/escort.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
declare var $:any;
declare var google: any;

@Component({
    selector: 'dashboard-cmp',
    moduleId: module.id,
    templateUrl: 'dashboard.component.html',
    providers: [EscortService]
})

export class DashboardComponent implements OnInit{

    constructor(private escortService : EscortService, private firebase : AngularFireDatabase) { }

onSubmit(escortForm: NgForm){
       if(escortForm.value.$key == null)
           this.escortService.newEscort(escortForm.value);
       else
           this.escortService.updateEscort(escortForm.value.$key, escortForm.value);
           this.resetForm(escortForm);
    }
}
import { Component, OnInit } from '@angular/core';
import { FormsModule }   from '@angular/forms';
import { NgForm } from '@angular/forms';
import { EscortService } from '../../services/escort.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';

@Component({
  selector: 'app-student-ordered-escort',
  templateUrl: './student-ordered-escort.component.html',
  styleUrls: ['./student-ordered-escort.component.scss'],
  providers: [EscortService]
})
export class StudentOrderedEscortComponent implements OnInit {

  constructor(private escortService : EscortService, private firebase : AngularFireDatabase) { }

  ngOnInit() {
  }

onSubmit(escortForm: NgForm){
        this.escortService.newEscort(escortForm.value);
    }
}
@Component({
    selector: 'dashboard-cmp',
    moduleId: module.id,
    templateUrl: 'dashboard.component.html',
    providers: [EscortService] // Delete this
})
@Component({
  selector: 'app-student-ordered-escort',
  templateUrl: './student-ordered-escort.component.html',
  styleUrls: ['./student-ordered-escort.component.scss'],
  providers: [EscortService] //Delete this
})
学生-订购-护送.component.ts

import { Component, OnInit } from '@angular/core';
import * as Chartist from 'chartist';
import { FormsModule }   from '@angular/forms';
import { NgForm } from '@angular/forms';
import { EscortService } from '../services/escort.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
declare var $:any;
declare var google: any;

@Component({
    selector: 'dashboard-cmp',
    moduleId: module.id,
    templateUrl: 'dashboard.component.html',
    providers: [EscortService]
})

export class DashboardComponent implements OnInit{

    constructor(private escortService : EscortService, private firebase : AngularFireDatabase) { }

onSubmit(escortForm: NgForm){
       if(escortForm.value.$key == null)
           this.escortService.newEscort(escortForm.value);
       else
           this.escortService.updateEscort(escortForm.value.$key, escortForm.value);
           this.resetForm(escortForm);
    }
}
import { Component, OnInit } from '@angular/core';
import { FormsModule }   from '@angular/forms';
import { NgForm } from '@angular/forms';
import { EscortService } from '../../services/escort.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';

@Component({
  selector: 'app-student-ordered-escort',
  templateUrl: './student-ordered-escort.component.html',
  styleUrls: ['./student-ordered-escort.component.scss'],
  providers: [EscortService]
})
export class StudentOrderedEscortComponent implements OnInit {

  constructor(private escortService : EscortService, private firebase : AngularFireDatabase) { }

  ngOnInit() {
  }

onSubmit(escortForm: NgForm){
        this.escortService.newEscort(escortForm.value);
    }
}
@Component({
    selector: 'dashboard-cmp',
    moduleId: module.id,
    templateUrl: 'dashboard.component.html',
    providers: [EscortService] // Delete this
})
@Component({
  selector: 'app-student-ordered-escort',
  templateUrl: './student-ordered-escort.component.html',
  styleUrls: ['./student-ordered-escort.component.scss'],
  providers: [EscortService] //Delete this
})
app.module.ts

@NgModule({
  ...
  providers: [EscortService],
  ...
})
因为当你尝试推送的时候,你的护送名单是未定义的。 更改您的服务:

newEscort(escort: Escort) {

    if (escort.driver == 'No driver yet' || escort.driver == null)
      escort.status = "Unassigned";
    else
      escort.status = "Assigned";


    if (!this.escortList) {
      this.escortList = this.getData();
    }

    this.escortList.push({
      driver: escort.driver,
      pickup: escort.pickup,
      dropoff: escort.dropoff,
      passengers: escort.passengers,
      no_show: false,
      status: escort.status,
      created: Date.now(),
      finished: null
    });
  }

它仍然给我同样的错误:护送列表未定义。