angular - 屬性 'unsubscribe' 在類型 'Observable' 上不存在
Typescript(在 Atom 編輯器中的 tslint)給了我一個 TypeScript 錯誤,但我無法弄清楚如何設置正確的類型。
錯誤訊息:
聊天元件:
private _chatObserver: Observable<firebase.database.DataSnapshot>
otherMethod () {
this._chatObserver = this._chat.observe(alarmId)
this._chatObserver.subscribe(
(messageSnap: firebase.database.DataSnapshot) => {
this.messages.push(messageSnap.val())
},
error => {throw error})
}
ionViewDidLeave() {
this._chatObserver.unsubscribe()
}
_聊天提供者:
public observe (alarmId){
let messagesRef = this._ref.child(`alarms/${alarmId}/messages`)
const observable = Observable.create(observer => {
messagesRef.on('child_added',(messageSnap) => {
observer.next(messageSnap)
},
(error) => observer.error(error)
)
return () => {
messagesRef.off('value')
};
});
return observable
}
答案#1
`Unsubscribe` 是訂閱本身的方法。因此,請在最上方添加:
private _chatSubscription;
然後在你的 otherMethod 中:
this._chatSubscription = this._chatObserver.subscribe(...);
在你的銷毀/離開/終止處理程序中:
this._chatSubscription.unsubscribe();
答案#2
已訂閱的 observable 將返回一個訂閱實例,此實例具有 unsubscribe() 方法
private _chatObserver: Observable<firebase.database.DataSnapshot>
private _subscription:Subscription
otherMethod () {
this._chatObserver = this._chat.observe(alarmId)
this._subscription=this._chatObserver.subscribe(
(messageSnap: firebase.database.DataSnapshot) => {
this.messages.push(messageSnap.val())
},
error => {throw error})
}
ionViewDidLeave() {
this._subscription.unsubscribe()
}
