在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 相关文章推荐
限制文本框输入N个字符的js代码
May 13 Javascript
js有序数组的连接问题
Oct 01 Javascript
用IE重起计算机或者关机的示例代码
Mar 10 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
Nov 19 Javascript
js仿手机页面文件下拉刷新效果
Oct 14 Javascript
javascript 定时器工作原理分析
Dec 03 Javascript
详解JavaScript中return的用法
May 08 Javascript
BootStrap daterangepicker 双日历控件
Jun 02 Javascript
详解vue服务端渲染(SSR)初探
Jun 19 Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
Aug 20 Javascript
javascript中this的用法实践分析
Jul 29 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
日本十大惊悚动漫
2020/03/04 日漫
php购物车实现代码
2011/10/10 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
angularjs指令之绑定策略(@、=、&amp;)
2017/04/13 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
python自动安装pip
2014/04/24 Python
Python中的pack和unpack的使用
2018/03/12 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python中的逆序遍历实例
2019/12/25 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
二年级语文教学反思
2014/02/02 职场文书
安全承诺书
2015/01/19 职场文书
工伤调解协议书
2016/03/21 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python