我想从我的组件文件中的 firebase.service.ts 中获取用户值。
返回用户的方式是什么,以便可以在 stats.component.ts 文件中访问它们?如何在服务中的then块内返回值,以便component.ts中的myData变量具有来自服务的更新用户值。
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);
}
}
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();;
}
}
答案 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)}
)
}