从服务中获取firebase数据

时间:2018-03-24 12:55:20

标签: javascript angular typescript firebase firebase-realtime-database

我想从我的组件文件中的 firebase.service.ts 中获取用户值。

返回用户的方式是什么,以便可以在 stats.component.ts 文件中访问它们?如何在服务中的then块内返回值,以便component.ts中的myData变量具有来自服务的更新用户值。

firebase.service.ts

import { Injectable } from "@angular/core";
import { Observable as RxObservable } from "rxjs/Observable";
import { HttpClient, HttpHeaders, HttpResponse } from "@angular/common/http";
import "rxjs/add/operator/map";
import "rxjs/add/operator/do";
import * as firebase from "nativescript-plugin-firebase";


@Injectable()
export class DataService {


    user= [];


    constructor() { }

    firebaseInit() {

        firebase.init({
        }).then(
            () => {
               // console.log("initialized");
                 firebase.getValue('/companies')
                    .then(result => {
                        // JSON.stringify(result) will return the json object
                        // result.value will get the value 

                        console.log(JSON.stringify(result.value));
                        this.user = result.value;   


                    })
                    .catch(error => console.log("Error:" + error));        
        }
        ).catch(
            (err) => {console.log("Error is: " + err)}
        )


    }


     sendData() {
        console.log( "Outside firebaseInit" + this.user);

     }


}

stats.component.ts

import { Component, OnInit,Inject } from '@angular/core';
import {DataService} from "../services/firebase.service";

@Component({
    moduleId:module.id,
    templateUrl: "./stats.component.html"
})


export class StatsComponent {

    private mydata;

    constructor(private dataService:DataService){

    }

    ngOnInit(){

       this.mydata =  this.dataService.firebaseInit();;

    }





}

2 个答案:

答案 0 :(得分:0)

您可以在服务中尝试此方法。您应该在方法中返回数据

服务

firebaseInit() {

    return firebase.init({
    }).then(
        () => {
           // console.log("initialized");
            return  firebase.getValue('/companies')
                .then(result => {
                    // JSON.stringify(result) will return the json object
                    // result.value will get the value 

                    console.log(JSON.stringify(result.value));
                    this.user = result.value;   
                    return this.user;

                })
                .catch(error => console.log("Error:" + error));        
    }
    ).catch(
        (err) => {console.log("Error is: " + err)}
    )
}

在您的组件中

ngOnInit(){

       this.dataService.firebaseInit().then(data => this.mydata = data);

    }

答案 1 :(得分:0)

你必须返回内部的所有函数和结果。然后函数,任何遗漏的返回都将破坏promise链。

您可以直接返回结果而无需分配给另一个变量。

firebaseInit() {

    return firebase.init({
    }).then(
        () => {
           // console.log("initialized");
             return firebase.getValue('/companies')
                .then(result => {
                    // JSON.stringify(result) will return the json object
                    // result.value will get the value 

                    console.log(JSON.stringify(result.value));
                    return result.value;   


                })
                .catch(error => console.log("Error:" + error));        
    }
    ).catch(
        (err) => {console.log("Error is: " + err)}
    )


}