在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对象和DOM对象相互转化
Apr 24 Javascript
jquery BS,dialog控件自适应大小
Jul 06 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
May 07 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
Oct 07 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
Apr 17 Javascript
JS实现div内部的文字或图片自动循环滚动代码
Apr 19 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
Nov 17 Javascript
详解JS: reduce方法实现 webpack多文件入口
Feb 14 Javascript
JS模拟实现ECMAScript5新增的数组方法
Mar 20 Javascript
vue升级之路之vue-router的使用教程
Aug 14 Javascript
js实现html滑动图片拼图验证
Jun 24 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
Sep 01 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
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
php文件操作相关类实例
2015/06/18 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python简单贪吃蛇开发
2019/01/28 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
前台文员我鉴定
2014/01/12 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
财务担保书范文
2014/04/02 职场文书
《雪儿》教学反思
2014/04/17 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
骨干教师培训方案
2014/05/06 职场文书
考试作弊万能检讨书
2014/10/19 职场文书