在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 相关文章推荐
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
最简单的jQuery程序 入门者学习
Jul 09 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
Mar 18 Javascript
jQuery UI库中dialog对话框功能使用全解析
Apr 23 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
javascript 中select框触发事件过程的分析
Aug 01 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
node打造微信个人号机器人的方法示例
Apr 26 Javascript
微信小程序实现tab页面切换功能
Jul 13 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
JS highcharts实现动态曲线代码示例
Oct 16 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函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
Python通过select实现异步IO的方法
2015/06/04 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
python脚本实现验证码识别
2018/06/07 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
python如何从文件读取数据及解析
2019/09/19 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
亿企通软件测试面试题
2012/04/10 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
社区维稳工作方案
2014/06/06 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js