首页 > 解决方案 > 从服务获取数据到组件订阅方法

问题描述

亲爱的,我是 Angular 新手并尝试理解。目前我在 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);

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

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

标签: angularfirebase

解决方案


您的订阅无法使用,您需要将您的 observable 订阅到您的组件中。

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

为了解决此问题,在服务中:

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

推荐阅读