FirebaseObjectObservable return 空值
FirebaseObjectObservable return null value
我正在尝试从 firebase 检索单个对象,它没有 return 任何值 instear 我有这条消息而不是 "FirebaseObjectObservable {_isScalar: false, $ref: Reference, source: FirebaseObjectObservable, operator: ObserveOnOperator}"
这就是我编写服务的方式,getDataList() 方法工作 perfectly.The 我关心的是获取应该检索单个对象的 getDataD()。
import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable , FirebaseObjectObservable} from 'angularfire2/database';
import { Data } from '../data';
import { AngularFireModule } from 'angularfire2';
@Injectable()
export class Ng2fireServiceService {
private basePath: string = '/data';
dataL: FirebaseListObservable<Data[]> = null; // list of objects
dataD: FirebaseObjectObservable<Data> = null; // single object
constructor(private af: AngularFireModule,
private db: AngularFireDatabase) { }
getDataList(query={}): FirebaseListObservable<Data[]> {
this.dataL = this.db.list(this.basePath, {
query: query
});
return this.dataL
}
// Return a single observable item
getDataD(key: string): FirebaseObjectObservable<Data> {
const dataPath = `${this.basePath}/${key}`;
this.dataD = this.db.object(dataPath)
return this.dataD
}
}
这就是我在组件中的调用方式
import { Ng2fireServiceService } from '../../services/ng2fire-service.service';
import { Component, OnInit} from '@angular/core';
import { Data } from '../../data';
import { Router, ActivatedRoute, Params } from '@angular/router';
@Component({
selector: 'app-data-detail',
templateUrl: './data-detail.component.html',
styleUrls: ['./data-detail.component.css']
})
export class DataDetailComponent implements OnInit {
id : string ;
dataD : any;
constructor( public authService :AuthService, private SVC : Ng2fireServiceService,private router : Router,
private route : ActivatedRoute) { }
ngOnInit() {
this.id = this.route.snapshot.params['id'];
this.dataD = this.SVC.getDataD(this.id);
console.log(this.dataD);
}
}
你知道如何处理这个吗
因为你没有订阅 Observable。试试这个:
ngOnInit() {
this.id = this.route.snapshot.params['id'];
this.SVC.getDataD(this.id).subscribe(val => this.dataD = val);
我正在尝试从 firebase 检索单个对象,它没有 return 任何值 instear 我有这条消息而不是 "FirebaseObjectObservable {_isScalar: false, $ref: Reference, source: FirebaseObjectObservable, operator: ObserveOnOperator}"
这就是我编写服务的方式,getDataList() 方法工作 perfectly.The 我关心的是获取应该检索单个对象的 getDataD()。
import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable , FirebaseObjectObservable} from 'angularfire2/database';
import { Data } from '../data';
import { AngularFireModule } from 'angularfire2';
@Injectable()
export class Ng2fireServiceService {
private basePath: string = '/data';
dataL: FirebaseListObservable<Data[]> = null; // list of objects
dataD: FirebaseObjectObservable<Data> = null; // single object
constructor(private af: AngularFireModule,
private db: AngularFireDatabase) { }
getDataList(query={}): FirebaseListObservable<Data[]> {
this.dataL = this.db.list(this.basePath, {
query: query
});
return this.dataL
}
// Return a single observable item
getDataD(key: string): FirebaseObjectObservable<Data> {
const dataPath = `${this.basePath}/${key}`;
this.dataD = this.db.object(dataPath)
return this.dataD
}
}
这就是我在组件中的调用方式
import { Ng2fireServiceService } from '../../services/ng2fire-service.service';
import { Component, OnInit} from '@angular/core';
import { Data } from '../../data';
import { Router, ActivatedRoute, Params } from '@angular/router';
@Component({
selector: 'app-data-detail',
templateUrl: './data-detail.component.html',
styleUrls: ['./data-detail.component.css']
})
export class DataDetailComponent implements OnInit {
id : string ;
dataD : any;
constructor( public authService :AuthService, private SVC : Ng2fireServiceService,private router : Router,
private route : ActivatedRoute) { }
ngOnInit() {
this.id = this.route.snapshot.params['id'];
this.dataD = this.SVC.getDataD(this.id);
console.log(this.dataD);
}
}
你知道如何处理这个吗
因为你没有订阅 Observable。试试这个:
ngOnInit() {
this.id = this.route.snapshot.params['id'];
this.SVC.getDataD(this.id).subscribe(val => this.dataD = val);