2017-04-01 36 views
2

我想知道爲什麼當我運行此函數時,該項目從我的Firebase數據庫中刪除,但在我的Angular 2應用程序中,當它到達最後一項,它會將其從數據庫中刪除,但它不會將其從我的*ngFor循環中的列表中刪除。但是,如果我刷新頁面,則列表會更新並且條目不再存在。有人知道爲什麼會發生這種情況?AngularFire2 - 通過Observable刪除項目 - 最後一個項目不會從UI中刪除

這裏是在我的供應商的功能,以除去附着:

removeAttachment(attachment, projectId, requestId) { 
    return this._af.database.list(`/check_requests/${projectId}/${requestId}/attachments/${attachment.id}`).remove(); 
    } 

下面是在我的組件相關聯的數組:

public attachments: any = []; 
public attachmentKeys:any = []; 

這裏是一個異步函數填充attachmentsattachmentKeys數組更新:

populateFormWithRequest() { 
    this.formPopulationObs = this._checkRequests.getRequest(requestId, projectId).subscribe(requestData => { 

     // Get the attachments 
     if(requestData['attachments']) { 
     this.attachments = requestData['attachments']; 
     this.attachmentKeys = Object.keys(requestData['attachments']); 
     } 
    }); 
} 

這是我* ngFor環在我的HTML模板:

<ul class="attachment-list" *ngIf="attachments && (attachments | mapToIterable).length > 0"> 
      <li *ngFor="let key of attachmentKeys"> 
      <a target="_blank" href="{{attachments[key].url}}"><i class="fa fa-paperclip"></i>{{attachments[key].name}}</a> 
      <button (click)="removeAttachment(attachments[key], key)"><i class="fa fa-times"></i></button> 
      </li> 
     </ul> 

回答

3

這很可能是這一行:

if (requestData['attachments']) { 

當你刪除最後一個附件,attachments屬性不會在發出的存在請求對象。如果Firebase數據庫中的某個孩子沒有孩子,它也會被刪除。

所以requestData['attachments']將是虛假和attachmentsattachmentKeys屬性將保持不變。

解決辦法是這樣的:

if (requestData['attachments']) { 
    this.attachments = requestData['attachments']; 
    this.attachmentKeys = Object.keys(requestData['attachments']); 
} else { 
    this.attachments = {}; 
    this.attachmentKeys = []; 
} 
+0

你是一個紳士和學者。我愛你。 Thankyou,那很完美。 –