在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 相关文章推荐
AJAX的跨域与JSONP(为文章自动添加短址的功能)
Jan 17 Javascript
一个背景云变换js特效 鼠标移动背景云变化
Dec 28 Javascript
瀑布流布局并自动加载实现代码
Mar 12 Javascript
jQuery操作checkbox选择(list/table)
Apr 07 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
Jun 17 Javascript
JS实现同时搜索百度和必应的方法
Jan 27 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
JavaScript获取一个范围内日期的方法
Apr 24 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
addEventListener()与removeEventListener()解析
Apr 20 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 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原创论坛
2006/10/09 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
Python中for循环和while循环的基本使用方法
2015/08/21 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
python 实现字符串下标的输出功能
2020/02/13 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
质检部经理岗位职责
2014/02/19 职场文书
英文自荐信常用句子
2014/03/26 职场文书
市场营销工作计划书
2014/05/06 职场文书
交通安全责任书范本
2014/07/24 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
浅谈Redis的事件驱动模型
2022/05/30 Redis
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS