Firestore文档删除问题

时间:2018-03-15 10:23:56

标签: javascript firebase angular5 google-cloud-firestore

我正在使用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方法的错误相同。

请帮助

1 个答案:

答案 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"); 
    }); 

我建议您也阅读其中一些,因为此问题已经涵盖过(并且比我更好):