Vue使用技巧和项目中遇到的问题

新闻 前端
这里给大家分享一下vue使用技巧和项目中遇到的问题,希望对大家有用处。

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

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

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

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

2. 路由懒加载写法:

  1. // 我所采用的方法,个人感觉比较简洁一些,少了一步引入赋值。 
  2. const router = new VueRouter({ 
  3.  routes: [ 
  4.  path: '/app'
  5.  component: () => import('./app'), // 引入组件 
  6.  ] 
  7. }) 
  8. // Vue路由文档的写法: 
  9. const app = () => import('./app.vue'// 引入组件 
  10. const router = new VueRouter({ 
  11.  routes: [ 
  12.  { path: '/app', component: app } 
  13.  ] 
  14. }) 
  15. //前端全栈学习交流圈:866109386 
  16. //面向1-3经验年前端开发人员 
  17. //帮助突破技术瓶颈,提升思维能力 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

上代码:

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

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

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

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

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

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

选项:deep

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

选项:immediate

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

  1. watch: { 
  2.  obj: { 
  3.   handler(val, oldVal) { 
  4.   console.log('属性发生变化触发这个回调',val, oldVal); 
  5.   }, 
  6.   deep: true // 监听这个对象中的每一个属性变化 
  7.  }, 
  8.  step: { // 属性 
  9.   //watch 
  10.   handler(val, oldVal) { 
  11.   console.log("默认触发一次", val, oldVal); 
  12.   }, 
  13.   immediate: true // 默认触发一次 
  14.  }, 
  15.  }, 
责任编辑:张燕妮 来源: 简书
相关推荐

2018-05-02 09:18:17

Linux技巧嵌入式

2020-09-27 10:35:22

Vue前端代码

2021-05-06 09:06:12

Vue Router组件视图

2024-09-09 05:30:00

数据库Spring

2024-09-12 15:36:57

2022-03-26 13:31:18

项目node变量

2020-12-15 12:43:53

Nodenode应用NodeJS

2009-06-24 17:34:58

使用JSF的经验

2023-09-14 08:46:50

ReactVue

2023-12-21 08:51:37

防抖节流Vue.js

2022-11-18 07:54:02

Go中间件项目

2020-04-24 20:05:16

VueAxios前端

2021-03-02 09:45:07

java循环依赖开发技术

2022-09-30 09:04:29

开源开发

2020-10-27 14:15:42

SpringBoot

2010-08-31 16:01:18

CSS

2011-07-08 08:37:05

软件开发

2009-06-29 15:51:48

Spring容器

2011-09-05 14:26:43

PhoneGap插件

2021-08-04 08:27:00

VueReact自动化部署
点赞
收藏

51CTO技术栈公众号