vue使用技巧及vue项目中遇到的问题


Posted in Javascript onJune 04, 2018

这里给大家分享一下vue中的一些技巧,希望对大家有用处。(话不多说上代码)

1,vue路由拦截浏览器后退实现表单保存类似需求(为了防止用户突然离开,没有保存已输入的信息。)

//在路由组件中:
mounted(){
},
beforeRouteLeave (to, from, next) {
 if(用户已经输入信息){
 //出现弹窗提醒保存表单,或者自动后台为其保存
 
 }else{
 next(true);//用户离开
 }

请参考vue文档全局钩子和组件钩子

2,路由懒加载写法:

// 我所采用的方法,个人感觉比较简洁一些,少了一步引入赋值。
 const router = new VueRouter({
  routes: [
  path: '/app',
  component: () => import('./app'), // 引入组件
  ]
 })
 // Vue路由文档的写法:
 const app = () => import('./app.vue') // 引入组件
 const router = new VueRouter({
  routes: [
  { path: '/app', component: app }
  ]
 })

3,路由的项目启动页和404页面

一般项目都会设置这个,如果默认进入地址会跳到login页面,如果你输入的是一个没有用的路由或者是空路由会跳转到notFind页面(你自己设置的404页面)

export default new Router({
  routes: [
  {
   path: '/', // 项目启动页
   redirect:'/login' // 重定向到下方声明的路由 
  },
  {
   path: '*', // 404 页面 
   component: () => import('./notFind') // 或者使用component也可以的
  },
  ]
 })

4,setInterval路由跳转继续运行并没有销毁问题

beforeDestroy(){
  //我通常是把setInterval()定时器赋值给this实例,然后就可以像下面这么暂停。
 clearInterval(this.intervalid);
},

beforeDestroy方法是生命周期里组件销毁前执行的钩子函数,在离开的时候会触发这个方法,这个方法在其他的地方也会有妙用,希望大家可以去了解一下。

5,setTimeout/setInterval this指向改变,无法用this访问VUe实例

这个地方大家的默认方法肯定是:

//使用变量访问this实例
 let self=this;
  setTimeout(function () { 
   console.log(self);//使用self变量访问this实例
  },1000);

其实这个地方我们可以用箭头函数,因为箭头函数会改变this的指向,而指向的刚好是自己的父级this,所以我们可以这样用:

//箭头函数访问this实例 因为箭头函数本身没有绑定this
  setTimeout(() => { 
  console.log(this);
 }, 500);

这样我们的this就是指向我们的vue实例了。

6,Vue 数组/对象更新 视图不更新

方法一:直接使用最简单也是最有效的方法,深拷贝对象或者数组,视图会进行更新,不过会有一个缺点,深拷贝后的数组或者对象不是原来的那个数组或者对象,是你现在改变了之后的值。

上代码:

你的对象或者数组=JSON.parse(JSON.stringify(你的对象或者数组))
先进行转字符串,再转回对象,这个就进行了一个拷贝的过程,会触发视图的改变,同时也进行了一个数组的替换,有利有弊。

方法二:this.$set(你要改变的数组/对象,你要改变的位置/key,你要改成什么value)

this.$set(this.arr, 0, "OBKoro1"); // 改变数组
this.$set(this.obj, "c", "OBKoro1"); // 改变对象

这个是vue专门为改变不了数组设定的一个方法,使用也很简单(如果还是不懂请参考vue文档)

7,深度watch与watch立即触发回调

watch很多人都在用,但是这watch中的这两个选项deep、immediate,或许不是很多人都知道,我猜。

选项:deep

在选项参数中指定 deep: true,可以监听对象中属性的变化。

选项:immediate

在选项参数中指定 immediate: true, 将立即以表达式的当前值触发回调,也就是默认触发一次。

watch: {
  obj: {
   handler(val, oldVal) {
   console.log('属性发生变化触发这个回调',val, oldVal);
   },
   deep: true // 监听这个对象中的每一个属性变化
  },
  step: { // 属性
   //watch
   handler(val, oldVal) {
   console.log("默认触发一次", val, oldVal);
   },
   immediate: true // 默认触发一次
  },
  },

总结

以上所述是小编给大家介绍的vue使用技巧及vue项目中遇到的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
下拉菜单点击实现连接跳转功能的js代码
May 19 Javascript
javascript手工制作悬浮菜单
Feb 12 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
Aug 23 Javascript
原生node.js案例--前后台交互
Feb 20 Javascript
使用cropper.js裁剪头像的实例代码
Sep 29 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
Oct 26 Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 Javascript
vue2.0安装style/css loader的方法
Mar 14 Javascript
JavaScript中click和onclick本质区别与用法分析
Jun 07 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 Javascript
eslint 的三大通用规则详解
May 16 Javascript
JS监听Esc 键触发事键
Apr 14 Javascript
jQuery实现的滑块滑动导航效果示例
Jun 04 #jQuery
jQuery实现常见的隐藏与展示列表效果示例
Jun 04 #jQuery
js如何找出字符串中的最长回文串
Jun 04 #Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 #Javascript
jQuery实现的简单获取索引功能示例
Jun 04 #jQuery
JS实现统计字符串中字符出现个数及最大个数功能示例
Jun 04 #Javascript
Vue父子组建的简单通信之控制开关Switch的实现
Jun 04 #Javascript
You might like
javascript 对象的定义方法
2007/01/10 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
vue2项目使用sass的示例代码
2017/06/28 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python 布尔操作实现代码
2013/03/23 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
Python读取stdin方法实例
2019/05/24 Python
django的model操作汇整详解
2019/07/26 Python
Python上下文管理器全实例详解
2019/11/12 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
python的slice notation的特殊用法详解
2019/12/27 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
金智子午JAVA面试题
2015/09/04 面试题
面试感谢信范文
2015/01/22 职场文书
竞聘书的秘诀
2019/04/02 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
python获取对象信息的实例详解
2021/07/07 Python
logback如何自定义日志存储
2021/08/30 Java/Android
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
速龙x4-860k处理器相当于i几
2022/04/20 数码科技
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js