Angular Angularfire 2 流未定义 2 服务调用?
Angular 2 Service call is undefined from Angularfire 2 stream?
我有一个操作,我使用 angularfire2 从我的 firebase 中获取一些数据,映射它并对数据做一些 updates/checks 然后我想再次保存它但是我遇到了这个奇怪的问题它告诉我 'this.fs.getRiders' 未定义?但是我正在使用服务来创建流,我不太确定这里发生了什么。
这里是一些代码
@Injectable()
export class RoundService {
public currentRound:FirebaseListObservable<any>;
constructor(private af: AngularFire, private as:AuthService, private fs:FirebaseService) { }
pullCurrentRound(serieUid:string){
return this.af.database.object(`series/${serieUid}/currentRound`)
.flatMap((res)=>{
return this.af.database.object(`rounds/${res.$value}`)
.map((res)=>res)
.do(this.roundUpdates)
.do(this.saveRound)
})
}
saveRound(round){
this.fs.getRiders.update(round.uid,round)
.then(snap=>{
console.log(snap)
})
}
错误
Uncaught TypeError: Cannot read property 'getRiders' of undefined
at SafeSubscriber.RoundService.saveRound [as _next] (round.service.ts:57)
at SafeSubscriber.__tryOrSetError (Subscriber.js:232)
at SafeSubscriber.next (Subscriber.js:174)
at Subscriber._next (Subscriber.js:125)
at Subscriber.next (Subscriber.js:89)
at DoSubscriber._next (do.js:82)
at DoSubscriber.Subscriber.next (Subscriber.js:89)
at DoSubscriber._next (do.js:87)
at DoSubscriber.Subscriber.next (Subscriber.js:89)
at MapSubscriber._next (map.js:83)
有人有想法吗?
this
没有指向您期望的位置
pullCurrentRound(serieUid:string){
return this.af.database.object(`series/${serieUid}/currentRound`)
.flatMap((res)=>{
return this.af.database.object(`rounds/${res.$value}`)
.map((res)=>res)
.do(this.roundUpdates.bind(this)) // <<< changed
.do(this.saveRound.bind(this) // <<< changed
})
}
通过此更改,this
继续指向 roundUpdates
和 saveRound
中的当前 class 实例
另一种方法是使用箭头函数,但它们在您的具体情况下不太方便
pullCurrentRound(serieUid:string){
return this.af.database.object(`series/${serieUid}/currentRound`)
.flatMap((res)=>{
return this.af.database.object(`rounds/${res.$value}`)
.map((res)=>res)
.do(x => roundUpdates(x)) // <<< changed
.do(round => this.saveRound(round) // <<< changed
})
}
我有一个操作,我使用 angularfire2 从我的 firebase 中获取一些数据,映射它并对数据做一些 updates/checks 然后我想再次保存它但是我遇到了这个奇怪的问题它告诉我 'this.fs.getRiders' 未定义?但是我正在使用服务来创建流,我不太确定这里发生了什么。
这里是一些代码
@Injectable()
export class RoundService {
public currentRound:FirebaseListObservable<any>;
constructor(private af: AngularFire, private as:AuthService, private fs:FirebaseService) { }
pullCurrentRound(serieUid:string){
return this.af.database.object(`series/${serieUid}/currentRound`)
.flatMap((res)=>{
return this.af.database.object(`rounds/${res.$value}`)
.map((res)=>res)
.do(this.roundUpdates)
.do(this.saveRound)
})
}
saveRound(round){
this.fs.getRiders.update(round.uid,round)
.then(snap=>{
console.log(snap)
})
}
错误
Uncaught TypeError: Cannot read property 'getRiders' of undefined
at SafeSubscriber.RoundService.saveRound [as _next] (round.service.ts:57)
at SafeSubscriber.__tryOrSetError (Subscriber.js:232)
at SafeSubscriber.next (Subscriber.js:174)
at Subscriber._next (Subscriber.js:125)
at Subscriber.next (Subscriber.js:89)
at DoSubscriber._next (do.js:82)
at DoSubscriber.Subscriber.next (Subscriber.js:89)
at DoSubscriber._next (do.js:87)
at DoSubscriber.Subscriber.next (Subscriber.js:89)
at MapSubscriber._next (map.js:83)
有人有想法吗?
this
没有指向您期望的位置
pullCurrentRound(serieUid:string){
return this.af.database.object(`series/${serieUid}/currentRound`)
.flatMap((res)=>{
return this.af.database.object(`rounds/${res.$value}`)
.map((res)=>res)
.do(this.roundUpdates.bind(this)) // <<< changed
.do(this.saveRound.bind(this) // <<< changed
})
}
通过此更改,this
继续指向 roundUpdates
和 saveRound
另一种方法是使用箭头函数,但它们在您的具体情况下不太方便
pullCurrentRound(serieUid:string){
return this.af.database.object(`series/${serieUid}/currentRound`)
.flatMap((res)=>{
return this.af.database.object(`rounds/${res.$value}`)
.map((res)=>res)
.do(x => roundUpdates(x)) // <<< changed
.do(round => this.saveRound(round) // <<< changed
})
}