2017-12-18 107 views
1

我下面這個庫工作本地存儲並使用webstorage檢索它們。然而,刷新以後,我的價值觀恢復到舊的,其被存儲在內存中,data.service.ts本地存儲不刷新後使用Angular2內存數據

bot.component.html:

<tr *ngFor="let bot of bots" routerLink="/botlevelup/{{bot.id}}"> 
    <td>{{bot.id}}</td> 
    <td>{{bot.lastLevel}}</td> 
    <td>{{bot.secondLevel}}</td> 
</tr> 
內存-data.service

。 TS:

import { InMemoryDbService } from 'angular-in-memory-web-api'; 

export class InMemoryDataService implements InMemoryDbService { 
    createDb() { 
    const bots = [ 
    {"id":1,"lastLevel":5}, 
    {"id":2,"lastLevel":5}, 
    {"id":3,"lastLevel":5} 
]; 
    return {bots}; 
    } 
} 

botlevelup.component.html

Bot: {{bot.id}} 
Last Level: <input [(ngModel)]="bot.lastLevel" /> 
<button (click)="save()">Save</button> 

botlevelup.component.ts

save() { 
this.storage.store('boundValue', JSON.stringify(bot)); 
} 

我可以看到我更新的值存儲在「boundValue」使用控制檯日誌,和仍在刷新之後出現。

如何在刷新後從'boundValue'而不是原始的in-memory-data.service.ts中檢索更新的值?

我想達到的if else:

  1. 如果有對機器人1和2所做的更改,它將會從 'boundValue'
  2. 如果沒有以BOT 3所做的更改,它將從內存中的data.service中檢索。

編輯#1:檢索

getBots(): Observable<Bot[]> { 
     this.storage.retrieve('boundValue'); 
     return this.http.get<Bot[]>(this.botsUrl) 
     .pipe(
     catchError(this.handleError('getBots', [])) 
    ); 
    } 
+0

IIFC,你使用'boundValue'作爲每個'bot'對象的關鍵字,對吧?在這種情況下,最後的更新是您看到的唯一一個與以前的'boundValue'相關的值被覆蓋的b/c。 – bazzells

+0

我設法將兩臺機器人都存儲到了boundValue中。刷新後如何顯示機器人? – icedmilocode

+0

你是如何試圖從存儲中獲取數據的?你使用包文檔中的檢索方法嗎? – bazzells

回答

0

我管理,如果沒有更新即可返回基於機器人的更新值,也是機器人的舊值表的代碼段。在本地存儲機器人的

商店原始值:

段:

export const bots: Bot[] = [ 
{"id":1,"lastLevel":5}, 
{"id":2,"lastLevel":5}, 
{"id":3,"lastLevel":5} 
] 

var local = JSON.stringify(bots); 
this.storage.store('localstore', local); 

創建值更新本地存儲中,這個問題是boundValue存儲所有的變化。

this.storage.store('boundValue', JSON.stringify(bot)); 

檢索localstore和boundValue值,檢查是否有更新boundValue與如有更新替換localstore。

var newValues = this.storage.retrieve('boundValue'); 
    var oldValues = this.storage.retrieve('localstore '); 

如果沒有新值,則返回舊值。我使用這些值的變量 '數組':

if(boundValue == null){   
    var array = $.parseJSON(oldValues); 
} 

否則,在陣列中更新舊值:

else{ 
     var valueUpdate = $.parseJSON('[' + newValues + ']'); 
     var array  = $.parseJSON(oldValues); 

     for (var i=0; i<array.length; i++){ 
     for (var m=0; m<valueUpdate.length; m++){ 
      if (valueUpdate[m].id == array[i].id){ 
      array[i] = valueUpdate[m]; 
      break; 
      } 
     } 
     }  
    } 

最後:

this.bots = array; 

它可能不是最好的方式,但這是我能想出的東西。感謝所有關於我的問題的評論,這些評論讓我瞭解如何做到這一點。