在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 相关文章推荐
js中Math之random,round,ceil,floor的用法总结
Dec 26 Javascript
Javascript限制网页只能在微信内置浏览器中访问
Nov 09 Javascript
JavaScript中原型和原型链详解
Feb 11 Javascript
简单理解vue中Props属性
Oct 27 Javascript
JavaScript实现按键精灵的原理分析
Feb 21 Javascript
bootstrap table使用入门基本用法
May 24 Javascript
Js中async/await的执行顺序详解
Sep 22 Javascript
layui中layer前端组件实现图片显示功能的方法分析
Oct 13 Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
May 14 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
Bootstrap FileInput实现图片上传功能
Jan 28 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编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
PHP 中常量的知识整理
2017/04/14 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
Python Tkinter基础控件用法
2014/09/03 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python日志syslog使用原理详解
2020/02/18 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
公司的门卫岗位职责
2014/09/09 职场文书
实习协议书范本
2014/09/25 职场文书
学位证书委托书
2014/09/30 职场文书
结婚保证书
2015/01/16 职场文书
会计稽核岗位职责
2015/04/13 职场文书
英雄儿女观后感
2015/06/09 职场文书
养成教育主题班会
2015/08/13 职场文书
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技