繁体   English   中英

从服务中获取Firebase数据

[英]Fetching firebase data from a service

我想从组件文件中的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();;

    }





}

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

服务

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

    }

您必须返回.then函数内的每个函数和结果,任何丢失的返回都将破坏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)}
    )


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM