在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)


Posted in Javascript onSeptember 11, 2020

最近工作中碰到一个需求,添加一条数据时,自动记住上次选择的下拉框的数据,刚开始觉得没思路,后来请教了项目组长,组长直接一句,这不很简单吧,直接用cookie,我:.......

好吧,都王的差不多了,于是经过一番百度实践,测试,总算是可以了,接下来就说说实践以及一些坑!

开发环境: webpack+vue+java后台

要实现这个小功能,其实只需要在vue中写相应的功能就可以了,并不需要在后台写什么,但是如果写的不正确,后台也是会报错的,代码如下:

先把这几个方法写上,删除的看需求决定需不需要:

//设置cookie
    setCookie(projectId,exdays) {
      var exdate=new Date();//获取时间
      exdate.setTime(exdate.getTime() + 24*60*60*1000*exdays);//保存的天数
      //字符串拼接cookie
      window.document.cookie="projectId"+ "=" +projectId+";expires="+exdate.toGMTString();
    },
    //读取cookie
    getCookie:function () {
    console.log(document.cookie);
    let me=this;
    if (document.cookie.length>0) {
      var arr=document.cookie.split('; ');//这里显示的格式需要切割一下自己可输出看下
      for(var i=0;i<arr.length;i++){
      var arr2=arr[i].split('=');//再次切割
      //判断查找相对应的值
      if(arr2[0]=='projectId'){
        me.workhourData.projectId=arr2[1];//保存到保存数据的地方
      }
      }
    }
    },
    //清除cookie
    clearCookie:function () {
    this.setCookie("","",-1);//修改2值都为空,天数为负1天就好了
    },

我这里是只需要一个projectId即可,实际中可以根据具体需求设置,

注意,这里有个坑,那就是中文,如果你需要存储中文cookie,而不进行任何处理的话,那么后台是会报错的,

java.lang.IllegalArgumentException: Control character in cookie value or attribute

这个错误一般是中文编码引起的,中文采用的是Unicode编码,而英文采用的是ASCII编码,当Cookie保存中文的时候需要对中文进行编码,而且从Cookie中取出内容的时候也要进行解码,所以必须特殊处理

escape(value) 编码

cookievalue=unescape(value); 解码

百度有恨多中方法,这里不多说!

然后就是在页面每一次加载的时候去调用this.getCookie()方法就可以了,

还要记住一点是,保存的时候也要设置cookie,这样才会生效,还有就是时间问题了,根据具体需求传参即可!

最后需要说的时,如果一旦报错或者不想要cookie了,可以手动清楚浏览器cookie!,这是最快的方式:

在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)

补充知识:vue 前后端分离调用后端数据(加深记忆)

1、在.vue文件中引入调用对应后台数据方法,并调用此方法

import {getAccount} from '../assets/js/index'

2、前端申请后台数据(安装axios依赖)

//上方引入的index.js
import axios from 'axios'
import {baseUrl} from "./config";
import $ from 'jquery'
import './base'

export const getAccount=()=>{
  return axios.post(`${baseUrl}/index/index/index`).then(res=>{
    return res.data;
  })
}

//config.js
export const baseUrl='http://shagua.com';
//base.js
import axios from 'axios';
import qs from 'qs';
import router from '../../router'

axios.defaults.withCredentials=true; //允许跨域发送cookie
axios.defaults.transformRequest = [function(data) { //解析post数据
 if(typeof data=='object'){
 return qs.stringify(data);
 }else{
 return data;
 }
  
}];

axios.defaults.transformResponse=[function(data){ //拦截response请求,做统一跳转
 data=JSON.parse(data);
 if(data.status=='-99'){
 router.push({path:'/login'});
 }
 return data;
}];

3、后端接收前端申请并返回数据(此处使用tp5,这里是允许访问,后台业务去对应调用的方法里写)

//跨域访问的时候才会存在此字段
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
 
$allow_origin = array(
  'http://localhost:8080',
);
 
if(in_array($origin, $allow_origin)){
  header('Access-Control-Allow-Credentials: true');
  header("Access-Control-Allow-Headers: *");
  header('Access-Control-Allow-Origin:'.$origin);
  header('Access-Control-Max-Age:3600');
}

以上这篇在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery的试卷自动排版系统实现代码
Jan 06 Javascript
解析瀑布流布局:JS+绝对定位的实现
May 08 Javascript
jQuery实现密保互斥问题解决方案
Aug 16 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
通过Javascript读取本地Excel文件内容的代码示例
Apr 08 Javascript
javascript中typeof操作符和constucor属性检测
Feb 26 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
jQuery页面加载初始化的3种方法(推荐)
Jun 02 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
Sep 28 Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 Javascript
JavaScript ES6中const、let与var的对比详解
Jun 18 Javascript
JS常用跨域方法实现原理解析
Dec 09 Javascript
请求时token过期自动刷新token操作
Sep 11 #Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 #Javascript
Vue axios获取token临时令牌封装案例
Sep 11 #Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 #Javascript
vue 子组件和父组件传值的示例
Sep 11 #Javascript
jQuery实现朋友圈查看图片
Sep 11 #jQuery
详解webpack的文件监听实现(热更新)
Sep 11 #Javascript
You might like
php 获取mysql数据库信息代码
2009/03/12 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
PHP 实现缩略图
2021/03/09 PHP
表格 隔行换色升级版
2009/11/07 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
香港通票:Hong Kong Pass
2019/02/26 全球购物
网络安全方面的面试题
2015/11/04 面试题
服装设计行业个人的自我评价
2013/12/20 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
新课程改革心得体会
2016/01/22 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python