我正在使用Angular4和angularfire2-Firestore运行一个ionic3应用程序。
如何从Observable获取单个对象。我希望返回打字稿。
console.log(this.opportunity.title) // "Title1"
在下面的代码中,我使用了以索引作为参数的getOpportunityByIndex()方法。我得到以下输出,我不知道下一步该怎么做。
Observable {_isScalar: false, source: Observable, operator: MapOperator}
operator:MapOperator {thisArg: undefined, project: ƒ}
source:Observable {_isScalar: false, source: Observable, operator: MapOperator}
_isScalar:false
__proto__:Object
代码
export interface Opportunity { title: string; }
export interface OpportunityId extends Opportunity { id: string; }
opportunities: Observable<OpportunityId[]>;
constructor( public firebaseProvider: FirebaseProvider) {
this.opportunities = this.firebaseProvider.getOpportunities();
}
getOpportunityByIndex(index: number) {
this.opportunity = this.opportunities.map(arr => arr[index]);
console.log(this.opportunity.title);
}
}
FirebaseProviderService
import { Injectable } from '@angular/core';
import { AngularFirestore, AngularFirestoreCollection } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
export interface Opportunity { title: string; }
export interface OpportunityId extends Opportunity { id?: string; }
@Injectable()
export class FirebaseProvider {
private opportunitiesCollection: AngularFirestoreCollection<OpportunityId>;
opportunity: Opportunity
constructor(afs: AngularFirestore) {
this.opportunitiesCollection = afs.collection<Opportunity>('opportunities');
this.opportunities = this.opportunitiesCollection.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Opportunity;
const id = a.payload.doc.id;
return { id, ...data };
});
});
}
getOpportunities() {
return this.opportunities;
}
}
答案 0 :(得分:0)
据我所知,你的例子this.opportunities
正在返回一个带有机会数组的观察者。有了这个你只需要订阅流,然后你可以选择参数传递的特定索引。这是你需要做的:
getOpportunityByIndex(index: number) {
this.opportunities
.subscribe( opportunities => {
this.opportunity = opportunities[index];
console.log(this.opportunity.title);
});
}
修改强>
如果您想让它更灵活一点,您可以将机会列表定为常规数组
opportunities: OpportunityId[]
然后在构造函数中执行
constructor( public firebaseProvider:FirebaseProvider) {
this.firebaseProvider.getOpportunities()
.subscribe( opportunities => {
this.opportunities = opportunities;
});
}
然后你可以随时随地打电话
getOpportunityByIndex(index: number) {
this.opportunity = this.opportunities[index];
console.log(this.opportunity.title);
}