在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 multiSelect 多选下拉框
Jul 09 Javascript
深入理解JavaScript系列(13) This? Yes,this!
Jan 18 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
Oct 22 Javascript
PHP守护进程实例
Mar 06 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
详解javascript的变量与标识符
Jan 04 Javascript
微信小程序 loading 详解及实例代码
Nov 09 Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
Aug 30 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
Sep 25 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
jQuery实现日历效果
Sep 11 jQuery
请求时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
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
美国五金商店:Ace Hardware
2018/03/27 全球购物
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
工商管理应届生求职信
2013/10/07 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android