1. 程式人生 > >localStorage:自定義儲存資料方法及其使用總結

localStorage:自定義儲存資料方法及其使用總結

自定義一個localStorage本地儲存資料

接下來我們在src內新建一個store資料夾,和App.vue、components同一個層級,在裡面新建一個store.js,內容如下

​
​
​
const STORAGE_KEY = 'tabale-vuejs'//名字隨便起
export default {//向外輸出,以便元件接收
    fetch() {//我們定義的獲取資料的方法
        return JSON.parse(window.localStorage.getItem(STORAGE_KEY)
         || '[]')
    },
    save(items) {//我們定義的儲存資料的方法
        window.localStorage.setItem(STORAGE_KEY, JSON.stringify(items))
    }
}

​

​

​

getItem和setItem是window.localStorage的獲取和儲存資料的方法 
我們用JSON.stringify和JSON.parse把資料轉成字串和解析,這樣就方便我們寫入tabledata 
接下來我們新增新程式碼

​
<script>
import Storage from '../store/store'//新新增,把剛寫的localStorage匯入
export default {
name: "NewContact",
  data(){
    return {
      info: {
        name: '',
        age: null,
        sex: ''
      },
      options: [
        '女','男','保密'
      ],
       // 呼叫localStorage儲存資料
      tabledata: Storage.fetch()//把之前的刪除,寫入這個獲取資料的方法
    }
  },
  methods: {
    create(){
      this.tabledata.push(this.info)
      this.info =  {name: '', age: null, sex: ''}
    },
    del(index){
      this.tabledata.splice(index,1)
    }
  },
  watch:{//新新增,watch是vue的監聽,一旦監聽物件有變化就會執行相應操作
    tabledata{//新新增,被監聽的物件
// 呼叫localStorage儲存資料
      handler(items){Storage.save(items)},//新新增,監聽物件變化後所做的操作,一個函式,儲存資料
      deep: true//深度監聽,避免資料的巢狀層數太多,我們要使用深度監聽,這樣即使資料層級過多監聽不到
    }
  }

​

tabledata:由於fetch()得到的是陣列,所以直接tabledata: 後寫入就行類似於

tabledata:[{...},{...}]

當我們新增刪除資料時,可以開啟chrmoe瀏覽器的F12>Application>Local Storage進行檢視 
這裡寫圖片描述

總的來說就是我們點選頁面上的建立按鈕,watch監聽到tabledata有變化,就執行savedata(items){Storage.save(items)}進行資料儲存,點選刪除時,tabledata也有變化,同樣會執行儲存 

對localStorage的使用方法解釋

一、什麼是localStorage、sessionStorage

在HTML5中,新加入了一個localStorage特性,這個特性主要是用來作為本地儲存來使用的,解決了cookie儲存空間不足的問題(cookie中每條cookie的儲存空間為4k),localStorage中一般瀏覽器支援的是5M大小,這個在不同的瀏覽器中localStorage會有所不同。

二、localStorage的優勢與侷限

localStorage的優勢

1、localStorage拓展了cookie的4K限制

2、localStorage會可以將第一次請求的資料直接儲存到本地,這個相當於一個5M大小的針對於前端頁面的資料庫,相比於cookie可以節約頻寬,但是這個卻是隻有在高版本的瀏覽器中才支援的

localStorage的侷限

1、瀏覽器的大小不統一,並且在IE8以上的IE版本才支援localStorage這個屬性

2、目前所有的瀏覽器中都會把localStorage的值型別限定為string型別,這個在對我們日常比較常見的JSON物件型別需要一些轉換

3、localStorage在瀏覽器的隱私模式下面是不可讀取的

4、localStorage本質上是對字串的讀取,如果儲存內容多的話會消耗記憶體空間,會導致頁面變卡

5、localStorage不能被爬蟲抓取到

localStorage與sessionStorage的唯一一點區別就是localStorage屬於永久性儲存,而sessionStorage屬於當會話結束的時候,sessionStorage中的鍵值對會被清空

這裡我們以localStorage來分析

三、localStorage的使用

localStorage的瀏覽器支援情況:

這裡要特別宣告一下,如果是使用IE瀏覽器的話,那麼就要UserData來作為儲存,這裡主要講解的是localStorage的內容,所以userData不做過多的解釋,而且以博主個人的看法,也是沒有必要去學習UserData的使用來的,因為目前的IE6/IE7屬於淘汰的位置上,而且在如今的很多頁面開發都會涉及到HTML5\CSS3等新興的技術,所以在使用上面一般我們不會去對其進行相容

首先在使用localStorage的時候,我們需要判斷瀏覽器是否支援localStorage這個屬性

​
if(!window.localStorage){
            alert("瀏覽器支援localstorage");
            return false;
        }else{
            //主邏輯業務
        }

​

localStorage的寫入,localStorage的寫入有三種方法,這裡就一一介紹一下

if(!window.localStorage){
            alert("瀏覽器支援localstorage");
            return false;
        }else{
            var storage=window.localStorage;
            //寫入a欄位
            storage["a"]=1;
            //寫入b欄位
            storage.a=1;
            //寫入c欄位
            storage.setItem("c",3);
            console.log(typeof storage["a"]);
            console.log(typeof storage["b"]);
            console.log(typeof storage["c"]);
        }

執行後的結果如下:

這裡要特別說明一下localStorage的使用也是遵循同源策略的,所以不同的網站直接是不能共用相同的localStorage

最後在控制檯上面打印出來的結果是:

不知道各位讀者有沒有注意到,剛剛儲存進去的是int型別,但是打印出來卻是string型別,這個與localStorage本身的特點有關,localStorage只支援string型別的儲存。

localStorage的讀取

if(!window.localStorage){
            alert("瀏覽器支援localstorage");
        }else{
            var storage=window.localStorage;
            //寫入a欄位
            storage["a"]=1;
            //寫入b欄位
            storage.b=1;
            //寫入c欄位
            storage.setItem("c",3);
            console.log(typeof storage["a"]);
            console.log(typeof storage["b"]);
            console.log(typeof storage["c"]);
            //第一種方法讀取
            var a=storage.a;
            console.log(a);
            //第二種方法讀取
            var b=storage["b"];
            console.log(b);
            //第三種方法讀取
            var c=storage.getItem("c");
            console.log(c);
        }

這裡面是三種對localStorage的讀取,其中官方推薦的是getItem\setItem這兩種方法對其進行存取,不要問我這個為什麼,因為這個我也不知道

我之前說過localStorage就是相當於一個前端的資料庫的東西,資料庫主要是增刪查改這四個步驟,這裡的讀取和寫入就相當於增、查的這兩個步驟

下面我們就來說一說localStorage的刪、改這兩個步驟

改這個步驟比較好理解,思路跟重新更改全域性變數的值一樣,這裡我們就以一個為例來簡單的說明一下

if(!window.localStorage){
            alert("瀏覽器支援localstorage");
        }else{
            var storage=window.localStorage;
            //寫入a欄位
            storage["a"]=1;
            //寫入b欄位
            storage.b=1;
            //寫入c欄位
            storage.setItem("c",3);
            console.log(storage.a);
            // console.log(typeof storage["a"]);
            // console.log(typeof storage["b"]);
            // console.log(typeof storage["c"]);
            /*分割線*/
            storage.a=4;
            console.log(storage.a);
        }

這個在控制檯上面我們就可以看到已經a鍵已經被更改為4了

localStorage的刪除

1、將localStorage的所有內容清除

var storage=window.localStorage;
            storage.a=1;
            storage.setItem("c",3);
            console.log(storage);
            storage.clear();
            console.log(storage);

2、 將localStorage中的某個鍵值對刪除

var storage=window.localStorage;
            storage.a=1;
            storage.setItem("c",3);
            console.log(storage);
            storage.removeItem("a");
            console.log(storage.a);

控制檯檢視結果

localStorage的鍵獲取

var storage=window.localStorage;
            storage.a=1;
            storage.setItem("c",3);
            for(var i=0;i<storage.length;i++){
                var key=storage.key(i);
                console.log(key);
            }

使用key()方法,向其中出入索引即可獲取對應的鍵

四、localStorage其他注意事項

 一般我們會將JSON存入localStorage中,但是在localStorage會自動將localStorage轉換成為字串形式

這個時候我們可以使用JSON.stringify()這個方法,來將JSON轉換成為JSON字串

示例:

if(!window.localStorage){
            alert("瀏覽器支援localstorage");
        }else{
            var storage=window.localStorage;
            var data={
                name:'xiecanyong',
                sex:'man',
                hobby:'program'
            };
            var d=JSON.stringify(data);
            storage.setItem("data",d);
            console.log(storage.data);
        }

讀取之後要將JSON字串轉換成為JSON物件,使用JSON.parse()方法

var storage=window.localStorage;
            var data={
                name:'xiecanyong',
                sex:'man',
                hobby:'program'
            };
            var d=JSON.stringify(data);
            storage.setItem("data",d);
            //將JSON字串轉換成為JSON物件輸出
            var json=storage.getItem("data");
            var jsonObj=JSON.parse(json);
            console.log(typeof jsonObj);

打印出來是Object物件

另外還有一點要注意的是,其他型別讀取出來也要進行轉換

原文連結:點選開啟

相關推薦

localStorage定義儲存資料方法及其使用總結

自定義一個localStorage本地儲存資料 接下來我們在src內新建一個store資料夾,和App.vue、components同一個層級,在裡面新建一個store.js,內容如下 ​ ​ ​ const STORAGE_KEY = 'tabale-vuejs'//名

Android studio定義Android Studio方法註釋模板

前言 你們從Eclipse轉到Android Studio的時候,是不是會懷念Eclipse的方法註釋模版? 敲/**加回車,模板就出來了,而Android Studio卻不能自定義(或者我沒有找到) 現在我找到替代方法了,就是用live templates 步驟

實現中等難度通訊錄。需求 1、定義聯絡人類AddressContact。例項變數姓名(拼音,首字母大寫)、性別、電話號碼、住址、分組名稱、年齡。方法:自定義初始化方法(姓名、電話號碼)、顯示聯絡人

<span style="font-size:24px;">// 1、定義聯絡人類AddressContact。例項變數:姓名(拼音,首字母大寫)、性別、電話號碼、住址、分組名稱、年齡。方法:自定義初始化方法(姓名、電話號碼)、顯示聯絡人資訊 { NS

資料(十二)定義OutputFormat與ReduceJoin合併(資料傾斜)

一、OutputFormat介面         OutputFormat是MapReduce輸出的基類,所有實現MapReduce輸出都實現了OutputFormat介面。 1.文字輸出TextOutPutFormat  &n

VS下QT工程不能生成moc檔案的解決方法 定義編譯工具

選擇要moc的類的標頭檔案,滑鼠右鍵,選擇property->Item Type:將此項改為Custom Build Tool, 然後看到左邊會變成Custom Build Tool: 選擇Custom Build Tool->General:類比其他標頭檔案新增指令和輸出路徑

Kettle控制元件介紹(1)生成記錄、定義常量資料

這邊主要介紹2個控制元件,生成記錄以及自定義常量資料,屬於kettle輸入項裡。 一、生成記錄: 這是生成記錄的轉換圖,生成記錄的具體值如下: 如圖,建立三個欄位,分別為A、B、C,對其定義欄位型別和欄位值。最上面的"限制"是限制展示的數量;如圖,"限制"為5,那就展示5行。 結

Vue元件 定義元件props傳遞資料

一、new一個Vue 二、Vue中使用自定義元件需要先註冊元件 註冊元件(其實就是定義元件):可以註冊全域性元件,也可以註冊區域性元件。 三、btn是傳引數的,在使用組建的時候可以傳入不同的引數。 <body> <div id="app

ROS服務程式設計1,定義服務資料--srv檔案

ROS中的服務資料可以通過srv檔案進行語言無關的定義介面,一般放在srv資料夾,包含請求與問答兩個資料域,使用"---"分割開。 針對加法運算服務請求,建立一個服務型別的srv檔案/catkin_ws/src/my_package/srv/AddTwoInts.srv int64 a in

iOS--使用NSUserDefaults儲存定義模型資料

我們都用過NSUserDefaults來儲存資料,它是一個單例,在整個程式中只有一個例項物件,他可以用於資料的永久儲存,當我們只用來儲存登入的一些ID等資訊的時候,就沒必要搭建資料庫來儲存了,用NSUserDefaults就夠了,非常簡單實用,不必繁瑣的SQL語句,這也是大家

Android定義Application儲存全域性變數

構建app時,總是需要用到一些全域性變數,我們通過自定義的Application訪問。 我們的app就是一個application,啟動application時,系統會建立一個程序ID,所有的Activity就會在此程序上執行。可以在Application建立

SpringMvc通過定義註解在方法的引數中注入資料

說一個場景,有時候我們做後臺業務的時候,經常需要取session中儲存的使用者資訊,所以免不了一直需要寫下面這一段又長又無聊的程式碼: MemberCommand memberCommand = (MemberCommand) request.getSes

snownlp定義訓練樣本與模型儲存

snownlp包,是中文自然語言處理的一個Python包,可以用來處理分詞、情感分析等。 安裝該包之後,在各個功能目錄下預設會有一個訓練好的模型,當我們呼叫諸如情感分析的功能時,會使用該模型進行情感預測。然而,如果我們有自己的語料庫可以用來訓練,則可以大大提高預測的準確率。

再談定義結構體的對齊問題之__attribute__ ((packed))方法

問題來源:     我們在程式開發過程中往往會遇到這樣的問題:以某種資料格式寫入,再以此格式讀出,特別是socket通訊中,通常會遇到資料錯位問題,這就是資料結構的對齊的問題。為了讓我們的資料結構以

MySQL 第八篇定義函式、儲存過程、遊標

本篇內容由猿道教育的課程內容整理而來。 我把MySQL的內容整理成9篇部落格,學完這9篇部落格雖不能說能成為大神,但是應付一般中小企業的開發已經足夠了,有疑問或建議的歡迎留言討論。 自定義函式 一、函式的概念與定義 1、理解函式 函式可以看作是

多執行緒實現方式1定義一個類,繼承Thread類,並重寫run方法

/** * 多執行緒實現方式1: * 自定義一個類,繼承Thread類,並重寫run方法。 * 執行緒同時執行。 * @author jiaxutianhuo * */ public cl

深入講解iOS鍵盤三定義鍵盤的兩種方法

iOS系統提供了多種鍵盤,我們可以通過Enum型別設定。但有的時候由於某些特殊業務的需要,我們不得不自定義鍵盤,比如某些銀行的APP處於安全考慮,他們鍵盤數字的位置是隨機的,這個時候只能自定義鍵盤。幸運的是,iOS也為我們提供了多種方式自定義鍵盤。我們可以根據自身情況選擇合適

使用Hibernate的XML配置來對映列舉型別,儲存定義型別資料

如今使用Hibernater作為ORM框架時,幾乎都是採用註解方式進行對映,可以對映任何型別欄位。這裡要說的是 對映列舉型別,在註解的方式下很容易(以後再補充),但是xml配置下就顯得麻煩一點。更復雜的一種對映,就是 列舉型別儲存到資料庫中的型別不是字串本

C語言程式設計---9定義資料型別

/*輸入學生的學號、姓名、性別、年齡、成績、家庭住址,輸出成績較高的學生資訊*/ #include<stdio.h> void main() { struct student

使用Object物件的toString()方法定義判斷資料型別方法

Object.prototype.toString方法返回物件的型別字串 Object.prototype.toString.call(2) // "[object Number]" Obj