从服务获取数据到组件订阅方法

时间:2019-01-07 23:35:55

标签: angular firebase

亲爱的我是新手,请尝试一下。目前,我在Firebase中有一些列表,这些列表是我在组件中需要的。我在服务文件中收到了它们。

服务:

businessRef: AngularFireList<any>;
  business$: Observable<any[]>;
businessData: any[];

    constructor(private db: AngularFireDatabase,private router: Router) {  
}  
  getAllData(){

   this.businessRef = this.db.list('/types/business');
   this.business$ = this.businessRef.valueChanges();  
    this.business$.subscribe(businessData=> {
      this.businessData = businessData;
      console.log(this.businessData);
    });
  }

组件:

 constructor(public db: AngularFireDatabase, public questionSerivce: QuestionService) {

   }

   this.businessDateGraph = this.questionSerivce.getAllData();
   console.log(this.businessDateGraph);

该服务的控制台日志为我提供了正确的输出,但是当我尝试访问组件中的值时,我收到了错误“未定义”。

有人可以进一步帮助我吗?

1 个答案:

答案 0 :(得分:1)

您的订阅无法使用,您需要将可观察对象订阅到您的组件中。

如果在服务中进行订阅,则方法将返回到组件,而无需等待订阅结果。

为了解决此问题,请在使用中

getAllData(){
   this.businessRef = this.db.list('/types/business');
   this.business$ = this.businessRef.valueChanges();  
   return this.business$;
}

在您的组件中:

public allData :any[];

getAllData()
{
    this.questionSerivce.getAllData().subscribe(res => this.allData = res);
}