• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

本地存储不刷新后使用Angular2内存数据

angular 来源:icedmilocode 20次浏览

我下面这个库工作本地存储并使用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', [])) 
    ); 
    } 


===========解决方案如下:

我管理,如果没有更新即可返回基于机器人的更新值,也是机器人的旧值表的代码段。在本地存储机器人的

商店原始值:

段:

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; 

它可能不是最好的方式,但这是我能想出的东西。感谢所有关于我的问题的评论,这些评论让我了解如何做到这一点。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)