如何在 Angular 中处理本地存储丢失的项目?

Posted

技术标签:

【中文标题】如何在 Angular 中处理本地存储丢失的项目?【英文标题】:How to handle local storage missing item in Angular? 【发布时间】:2021-07-04 06:37:11 【问题描述】:

我有一个函数可以在本地存储中保存一些值。在另一种方法中,从本地存储重新加载值。处理本地存储中丢失项目的最佳方法是什么?如果用户将其从本地存储中删除,或者它根本不存在。 获取和设置本地存储坐标的方法:

    get savedValues():  val1: number, val2: number, val3: number [] 
        if (localStorage.getItem('savedValues') === null) 
            console.log("null");
            return null;
        
        return JSON.parse(localStorage.getItem('savedValues'));
    

    set savedValues(value:  val1: number, val2: number, val3: number []) 
        localStorage.setItem('savedValues', JSON.stringify(value));
    

从本地存储重新加载坐标的方法:

    reload(): void 
        try 
            for (var i = 0; i < this.savedValues.length; i++) 
                this.oldValues[i].val1 = this.savedValues[i].val1;
                this.oldValues[i].val2 = this.savedValues[i].val2;
                this.oldValues[i].val3 = this.savedValues[i].val3;

            
        
        catch (Exception) 
            console.log("savedValuesitem is null in the local storage");
        
    

尝试从本地存储中捕获空字段异常的正确方法是什么?我也试过了

if (this.savedValues!== null) ...

但这似乎需要很长时间才能检查本地存储。

【问题讨论】:

【参考方案1】:

尝试检查未定义:

if (this.savedCoordinates !== undefined) 
...

【讨论】:

【参考方案2】:

我不会为此使用 try/catch,因为在本地存储中没有值并不是真正的错误,而只是正常/可能的行为。我会做一个简单的空检查:

reload(): void 
    if (this.savedCoordinates !== null) 
        for (var i = 0; i < this.savedCoordinates.length; i++) 
            this.nodes[i].x = this.savedCoordinates[i].x;
            this.nodes[i].y = this.savedCoordinates[i].y;
        
        return;
    

    console.log("savedCoordinates item is null in the local storage");
    return;

【讨论】:

@OP:此外,我刚刚意识到您使用 Angular - get/set 将运行它的更改检测,因此非常频繁 - 这可能是它需要这么长时间的原因。我建议只使用基本函数(getCoordinatesgetCoordinates)来设置和获取值(只有在你调用它们时才会运行)。【参考方案3】:

你应该只检查一次本地存储:

    reload(): void 
   
        let coordinates=this.savedCoordinates;
        if (coordinates == null) 
         ...
        
        else
         for (var i = 0; i < coordinates; i++) 
            this.nodes[i].x = coordinates[i].x;
            this.nodes[i].y = coordinates[i].y;
           
         
   
   

【讨论】:

以上是关于如何在 Angular 中处理本地存储丢失的项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 4 中处理安全会话

在 Angular 2 应用程序中使用本地 npm 存储库中的组件

Ionic/Angular:在本地存储中读写数组

严格模式下的 Angular 和本地存储

如何在 Angular 8 中存储 jwt 令牌之类的数据?是不是有另一种使用本地存储或会话存储安全存储的方法?

为 HTML Angular 2 项目使用本地存储的安全性