网站首页 > 博客文章 正文
这里给大家分享一下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 } ] }) //前端全栈学习交流圈:866109386 //面向1-3经验年前端开发人员 //帮助突破技术瓶颈,提升思维能力
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 // 默认触发一次 }, },
猜你喜欢
- 2024-09-23 vue的数据驱动原理及简单实现(vue driver)
- 2024-09-23 「1分钟知识——前端01」vue双向绑定
- 2024-09-23 如何使用Vue中的嵌套插槽(包括作用域插槽)
- 2024-09-23 5.6 vue更新数组时触发视图更新的方法,熟记JavaScript原生方法
- 2024-09-23 学习Vue笔记012(3)- 列表渲染的注意
- 2024-09-23 vue更新数组时触发视图更新方法(vue中数组发生变化但视图没有更新)
- 2024-09-23 深入浅出 Vue Mixin(深入浅出全文免费阅读笔趣阁番外)
- 2024-09-23 Vue3 样式绑定: 内联样式与Class属性的数组语法
- 2024-09-23 vue 基础- mixins 多继承方式的代码复用
- 2024-09-23 Vue3框架搭建(vue3ui框架)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)