溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue中怎么設置全局的cookie對象

發(fā)布時間:2022-10-26 10:00:30 來源:億速云 閱讀:127 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了Vue中怎么設置全局的cookie對象的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Vue中怎么設置全局的cookie對象文章都會有所收獲,下面我們一起來看看吧。

Vue設置全局的cookie對象封裝方法

在global.js中加入:

var cookie = {
    set: function(key, val, time) { //設置cookie方法
        var date = new Date(); //獲取當前時間
        var expiresDays = time; //將date設置為n天以后的時間
        date.setTime(date.getTime() + expiresDays * 24 * 3600 * 1000); //格式化為cookie識別的時間
        document.cookie = key + "=" + val + ";expires=" + date.toGMTString(); //設置cookie
    },
    get: function(key) { //獲取cookie方法
        /*獲取cookie參數(shù)*/
        var getCookie = document.cookie.replace(/[ ]/g, "$"); //獲取cookie,并且將獲得的cookie格式化,去掉空格字符,換成$
        getCookie = getCookie.replace(/[;$]/g, ";");
        var arrCookie = getCookie.split(";") //將獲得的cookie以"分號"為標識 將cookie保存到arrCookie的數(shù)組中
        var tips; //聲明變量tips
        // console.info(arrCookie);
        for (var i = 0; i < arrCookie.length; i++) { //使用for循環(huán)查找cookie中的tips變量
            var arr = arrCookie[i].split("="); //將單條cookie用"等號"為標識,將單條cookie保存為arr數(shù)組
            // console.info("get key=",key,"arr[0]=",arr[0]);
            if (key == arr[0]) { //匹配變量名稱,其中arr[0]是指的cookie名稱,如果該條變量為tips則執(zhí)行判斷語句中的賦值操作
                tips = arr[1]; //將cookie的值賦給變量tips
                break; //終止for循環(huán)遍歷
            }
        }
        if (tips) {
            tips = tips.replace(/[$]/g, " "); //還原空格字符串
        }
        // console.info("get key=",key,"value=",tips);
        return tips;
    },
    delete: function(key) { //刪除cookie方法
        var date = new Date(); //獲取當前時間
        date.setTime(date.getTime() - 10000); //將date設置為過去的時間
        document.cookie = key + "=v; expires =" + date.toGMTString(); //設置cookie
    },
    setArray: function(key, val, time) {
        if (val) {
            val = val.join('-*-');
        }
        // console.info("setArray", this)
        this.set(key, val, time);
    },
    getArray: function(key) {
        var arrayStr = document.cookie.replace(/[ ]/g, "$");
        arrayStr = arrayStr.replace(/[;$]/g, ";");
        // console.info("arrayStr",arrayStr)
        var arrCookie = arrayStr.split(";") 
        var tips; //聲明變量數(shù)組tips
        
        for (var i = 0; i < arrCookie.length; i++) { //使用for循環(huán)查找cookie中的tips變量
            var arr = arrCookie[i].split("="); //將單條cookie用"等號"為標識,將單條cookie保存為arr數(shù)組
            // console.info('arrCookie',key == arr[0],arr[0])
            if (key == arr[0]) { //匹配變量名稱,其中arr[0]是指的cookie名稱,如果該條變量為tips則執(zhí)行判斷語句中的賦值操作
                tips = arr[1]; //將cookie的值賦給變量tips
                if (tips) {
                    tips = tips.replace(/[$]/g, " "); //還原空格字符串
                }
                tips = tips.split("-*-");
                break; //終止for循環(huán)遍歷
            }
        }
        return tips;
    }
}

export default {
    cookie,
}

在main.js中加入

import Global from "./utils/global.js";//根據(jù)實際路徑調(diào)整,我這里是utils目錄下

使用

data(){
    return {
        selectedItems = [1,2,3,4]
    }
}
methods:{
    addItems(){
        this.$Global.cookie.set("status", true);
        this.$Global.cookie.setArray('selectedItems', this.selectedItems, 24);
    },
    show(){
        this.$Global.cookie.get("status");
        this.$Global.cookie.getArray('selectedItems');
    }
}

小結:

cookie是document自帶的全局對象,是字符串對象。

數(shù)組要存在cookie中需要先轉(zhuǎn)為字符串,否則,直接set會直接調(diào)用Object.tostring方法,會將“[object]”作為字符串存入

Vue中cookie的使用

cookie的使用說起來非常的簡單,不就是傳入(設置)cookie,獲取cookie值,刪除cookie嗎,說真的其實真的沒有那么難,來咱們先來把設置cookie,獲取cookie,刪除cookie的方法進行一下封裝,說白了就是給他放到一個單獨的js內(nèi),方便我們?nèi)フ{(diào)用,這段代碼也可以去網(wǎng)上去找找,都大同小異

//獲取cookie、
export function getCookie(name) {
    var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
    if (arr = document.cookie.match(reg))
      return (arr[2]);
    else
      return null;
  }
  
  //設置cookie,增加到vue實例方便全局調(diào)用
  export function setCookie (c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
  };
  
  //刪除cookie
  export function delCookie (name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = getCookie(name);
    if (cval != null)
     document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
  };

接下來就是調(diào)用了,你可以在main.js內(nèi)進行一下全局掉用,也可以在你使用的組件內(nèi)來進行調(diào)用它,我這里就是在父組件內(nèi)進行的調(diào)用

<script>
import Vue from 'vue'
import {setCookie, getCookie, delCookie} from './util/util.js';
//參數(shù)因為是三個方法,所以用大括號來進行調(diào)用了,路徑一定要寫對
export default {
  name: 'App',
  beforeMount () {
    Vue.prototype.$cookieStore = {
      setCookie,
      getCookie,
      delCookie
    }
  }
}
</script>

開始 的時候要先進行傳入cookie值傳的方法,看代碼

this.$cookieStore.setCookie( 'name' , this.ruleForm2.name)
//‘name'是你自己取得名字,后面的this.ruleForm2.name是我寫的一個input內(nèi)v-model的值

最后在頁面里進行使用獲取的時候,可能就有很多人就像我一樣懵了不知道應該怎么調(diào)用了,其實只需要放上一句話就行,看代碼

this.$cookieStore.getCookie( 'name')

刪除也是一樣

this.$cookieStore.delCookie( 'name');

注意的是,那個name名字是不能取不一樣的啊,當你傳入了你獲取和刪除也要都用name才行。

遇到的問題  

我曾才main.js內(nèi)這樣引用過,當時也確實成功了,能夠正常的傳值獲取值,但獲取cookie值的時候,進入頁面獲取成功,能夠正常打印和使用,但是當你點擊刷新頁面的時候他的獲取功能就是去了作用,返回的值就是undefined,會出現(xiàn)報錯,

import {setCookie, getCookie, delCookie} from './util/util.js';
Vue.prototype.$cookieStore = {
  setCookie,
  getCookie,
  delCookie
}

解決問題

當時感覺應該是生命周期那運行的時候出現(xiàn)了問題,開始的時候,生命周期進行正常的運行,當你在頁面進行刷新,生命周期出現(xiàn)斷層導致getcookie沒辦法運行,

 beforeMount () {//以前正常運行的時候是mounted,往上走了一級就行了
    Vue.prototype.$cookieStore = {
      setCookie,
      getCookie,
      delCookie
    }
  }

關于“Vue中怎么設置全局的cookie對象”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Vue中怎么設置全局的cookie對象”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI