我正在使用firestore,我已经编写了一个服务代码来从其中一个集合中删除文档。
firestore.service.ts
deleteFromCollection(id: string){
this.eventDoc = this.afs.doc(`bookings/${id}`);
return this.eventDoc.delete();
}
blank.component.ts
deleteData(){
let audio = new Audio();
audio.src= "./assets/app/media/sound/to-the-point.mp3";
audio.load();
this._firestoreService.deleteFromCollection(this.eventToShow.id).
then(function(){
this.closeEditModal();
audio.play();
this.showToastr("Deletion Done Successfully");
}).
catch(function(error){
this.closeEditModal();
audio.play();
this.showToastr("Deletion Error");
});
}
showToastr(msg){
this.message = true;
this.deletionMessage = msg;
setTimeout(() => this.message = false, 5000);
}
closeEditModal(){
$('#edit_modal').removeClass('show');
}
因此,当我使用上面的代码时,执行删除,但是section不能调用已经存在于BlankComponent类中的showToastr / closeEditModal方法。
它给出了这个错误:
TypeError:无法读取undefined的属性'closeEditModal'。
和showToastr方法的错误相同。
请帮助
答案 0 :(得分:0)
在回调函数内部,this
的含义会更改为该特定函数。这意味着在您的第this.showToastr(...)
行中,this
引用了本地回调函数,该函数没有showToastr
方法。
最简单的解决方案是为this
的正确值创建阴影变量:
var that = this;
this._firestoreService.deleteFromCollection(this.eventToShow.id).
then(function(){
that.closeEditModal();
audio.play();
that.showToastr("Deletion Done Successfully");
}).
catch(function(error){
that.closeEditModal();
audio.play();
that.showToastr("Deletion Error");
});
我建议您也阅读其中一些,因为此问题已经涵盖过(并且比我更好):