2016-11-27 30 views
2

我正在處理一個相對簡單的任務應用程序,我無法弄清楚什麼是設置ID(和任何潛在的其他服務器創建的內容)都會返回到POST請求的響應中。例如;如何最好在POST請求的響應後設置客戶端創建的對象的ID

// POST Data 
{ 
    title: 'The title for the task', 
    due: '2016-01-01' 
} 

// Response 
{ 
    id: 123, 
    title: 'The title for the task', 
    due: '2016-01-01' 
} 

目前,我有推新任務的進入在subscribe功能發生的集合,但是這意味着,任務不添加到列表中(並因此頁)瞬間。允許將任務對象立即推入集合,然後根據API更新進行響應或替換該對象的最佳方法是什麼?

我考慮編輯集合中的最後一個任務,但顯然可以在返回第一個任務之前添加第二個任務。

下面的代碼顯示了當前的實現,其中列表組件和響應時發出事件的子表單組件。

// task-form.component.ts 
addTask(task) { 
    this.taskService.create(task) 
    .subscribe(savedTask => { 
     this.taskAdd.emit(savedTask); 
     this.task.title = null; 
    }); 
} 

// task-list.component.ts (listening to the taskAdd event) 
addTaskToPeriod(task: Task) { 
    this.tasks.push(task); 
} 

謝謝!

+0

您還可以使用[GUID](https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript)考慮客戶端生成的ID ... – david

回答

0

不知道這是否是這樣做的最好方法,但由於任務對象是通過引用傳遞給addTask方法的,我只是立即發送事件以便任務出現在UI中,然後設置ID在任務對象上響應API;

addTask(task) { 
    // Emit immediately 
    this.taskAdd.emit(task); 

    this.taskService.create(task) 
     .subscribe(savedTask => { 
     // Update the task that is now visible in the UI by reference 
     task.id = savedTask.id; 
     }); 

    // Full reassignment to prevent further by-reference side effects 
    this.task = {}; 
    } 
相關問題