2017-10-07 219 views
1

刪除對象(我很新的角度和相當新的編碼,所以請原諒我,如果我的問題似乎沒那麼亮。)Angularfire從查找列表

我的項目和任務列表。我可以將任務添加到項目中並在項目組件中的表中迭代它們(通過使用非規格化查找表)。但我無法弄清楚如何使用projectTasks表中每行迭代的按鈕從項目中刪除它們。

Plnkr:http://plnkr.co/edit/BSAYL6PfLLCQ7xXWIo2N?p=info

項目接口:

export interface Project { 
$key: string; 
name: string; 
projectTasks: { 
    [key: string]: { 
     name: string; 
     assignedTo?: string; 
     dueDate?: String; 
     estTime?: String; 
    } 
};} 

任務界面:

export interface Task { 
$key: string; 
name: string; 
assignedTo?: string; 
dueDate?: string; 
estTime?: string; } 

添加任務功能:

//(selectedTask: Task, projectTasks = [];) 
    addTask() { 
    this.project.projectTasks[this.selectedTask.$key] = { 
     name: this.selectedTask.name, 
     assignedTo: this.selectedTask.assignedTo ? this.selectedTask.assignedTo : 'N/A', 
     dueDate: this.selectedTask.dueDate ? this.selectedTask.dueDate : 'N/A' , 
     estTime: this.selectedTask.estTime ? this.selectedTask.estTime : 'N/A' , 
    }; 
    this.setProjectTasks(); 

設置項目任務功能:

setProjectTasks() { 
    if (this.project.projectTasks == null) { 
     this.project.projectTasks = {}; 
    } 
    this.projectTasks = Object.keys(this.project.projectTasks) 
     .map(key => this.project.projectTasks[key]); 
} 

刪除任務功能:(刪除整個任務節點)

removeTask(task) { 
    this.taskService.removeTask(task) 
    .then(_ => this.router.navigate([`ww/task-list`])); 
} 

任務服務刪除任務:

removeTask(task) { 
    return this 
     .tasks$ 
     .remove(task.$key) 
     .then(_ => alert('Task Successfully Deleted')) 
     .catch(error => console.log(error)); 

我可以在下拉迭代分配的任務所顯示和我需要找到一個邏輯,使用Remove按鈕使用null值更新addedTask,而不必刪除實際的任務節點。

<div class="form-group row"> 
<label for="remove-row">Remove Tasks From Project</label> 
<md-select placeholder="Select a Task" [(ngModel)]="selectedTask"> 
<md-option *ngFor="let projectTask of projectTasks" [value]="projectTask"> 
{{projectTask.name}} </md-option> 
</md-select> 
<button class="btn btn-primary" 
(click)="removeProjectTask(projectTask)">Remove From Project</button> 

+0

'removeProjectTask(TASKNAME:串){常量taskKey = Object.keys(this.project.projectTasks).find(密鑰=> {返回this.project.projectTasks [鍵]。名稱===此。 '; '刪除this.project.projectTasks [taskKey]; this.setProjectTasks();}' 正在爲我工​​作。 – ReturnTable

回答

0

下述溶液一直爲從所述查找表中除去的對象。

removeProjectTask(taskName: string) { 
const taskKey = Object.keys(this.project.projectTasks) 
    .find(key => {return this.project.projectTasks[key] 
    .name === this.selectedTask.name ;}); 
delete this.project.projectTasks[taskKey]; 
this.setProjectTasks(); 
}