初学者可能不知道的vue技巧
前言
大家好,这里是@IT·平头哥联盟,我是首席甩锅官——老金,今天给大家分享的,一些日常中神秘而又简单的vue的实用小技巧,以及我在我司项目中实用vue的总结和坑,跟大家一起分享,希望能给其他攻城狮带来些许便利,如有理解错误,请纠正。
技巧/坑点
1.setTimeout/ setInterval
场景一 :this指向改变无法用this访问vue实例
mounted(){
setTimeout( function () {
//setInterval同理
console.log(this); //此时this指向Window对象
},1000) ;
}复制代码
解决方法 :使用箭头函数或者缓存this
//箭头函数访问this实例因为箭头函数本身没有绑定this
setTimeout(() => {
console. log(this);}, 500) ;
//使用变量访问this实例let self=this;
},1000);
setTimeout (function () {
console. log(self);//使用self变量访问this实例
}, 1000) ;
复制代码
setInterval路由跳转继续运行并没有销毁
场景一 :比如一些弹幕,走马灯文字,这类需要定时调用的,路由跳转之后,因为组件已经销毁了,但是setlnterval还没有销毁,还在继续后台调用,控制台会不断报错,如果运算量大的话,无法及时清除,会导致严重的页面卡顿。
解决方法 :在组件生命周期beforeDestroy停止setInterval
created() {
this.intervalid = setInterval(() => {
this.layerError = "";
this.Timer = null;
}, 100000);
}
beforeDestroy( ){
//我通常是把setInterval( )定时器赋值给this实例,然后就可以像下面这么暂停。
clearInterval(this.intervalid);
}复制代码
2.Vue路由拦截浏览器后退实现草稿保存类似需求
场景一 :为了防止用户突然离开,没有保存已输入的信息。
解决方法 :
//在路由组件中:mounted(){},
beforeRouteLeave (to, from, next) {
if(用户已经输入信息){
//出现弹窗提醒保存草稿,或者自动后台为其保存
}else{
next(true);//用户离开
}
}
复制代码
3.自定义组件添加click等事件不生效
场景一 :一些自定义组件,需要额外添加一些事件来实现一些特定需求
<template>
<el-progress type="circle" :percentage=“0" @click=“stopProgress”></elprogress>
</template>
<script>
export default {
methods:{
stopProgress() {
console.log('停止')
}
}
}
</script>复制代码
解决方法:使用.native修饰符
<template>
<el-progress type="circle" :percentage=“0" @click.native=“stopProgress”></el-progress>
</template>
<script>
export default {
methods:{
stopProgress() {
console.log('停止')
}
}
}
</script>复制代码
4.手动操控自定义组件
场景一 :一些自定义组件,需要去获取组件对象进行一些其他的Dom操作
解决方法 :使用ref属性暴露组件获取句柄
<template>
<el-progress type="circle" :percentage="O" ref="progress"></el-progress></template>
<script>
this.$refs.progress //组件对象实例, 可以手动调用组件的内置方法和属性
this.$refs.progress.$el //组件 对象的最外层dom元素
</script>
复制代码
5.深度作用选择器
场景一 : scoped的样式,希望影响到子组件的默认样式
在样式中设置完scoped在浏览器解析为如下图这样,a是个div,a div里面包含一个组件里面解析完了div的样式名字为b,想在父组件影响到子组件的默认样式。
解决方法:
<style scoped>
.a >>> .b { /* ... */ }
</style>
//有些像Sass之类的预处理器无法正确解析>>>。这种情况下你可以使用/deep/操作符取而代之- - - -这是一个>>>的别名,同样可以正常工作。
<style scoped lang=“scss”>
.a /deep/ .b { /* ... */ }
</style>复制代码
6.Vue数组/对象更新视图不更新
场景一 :很多时候我们习惯于这样操作数组和对象
data() {
return {
arr: [1,2,3],
obj:{
a: 1,
b: 2
}
};
},
// 数组更新视图不更新
this.arr[0] = 'OBKoro1';
this.arr.length = 1;
console.log(arr);// ['OBKoro1'];
// 数据更新,对象视图不更新
this.obj.c = 'OBKoro1';
delete this.obj.a;
console.log(obj); // {b:2,c:'OBKoro1'}
复制代码
解决方法 :
this. $set(你要改变的数组/对象,你要改变的位置/key,你要改成什么value)
数组原生方法触发视图更新( vue官网可查):
整体替换数组/对象
7.Vue Filters过滤器的使用
场景一 :常见的数据文本的格式化
<!-- 在双花括号中 -->
<div>{{ message | DateFormat }}</div> //展示正确时间
<!-- 在'v-bind'中 -->
<div v-bind:id="rawId | formatId"></div>
Demo:一个日期过滤器返回yyyy- MM-ddhh:mm:ss的样式
引入一个提前写好日期格式化的js
import dayjs from ‘dayjs';
export default {
data() {
return {
//时间毫秒
message:18324798324789
}
},
filters: {
//传入进行日期格式化
DateFormat(value) {
return dayjs(value).format(“YYYY-MM-DD HH:mm:ss")
}
}
}复制代码
8.Vue深度watch与watch立即触发回调
场景一 :在watch里面监测对象里面对应的值是监测不到的,可以用如下方法。
选项: 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 // 默认触发一次
}
}
欢迎大家一起探讨 ~~
最后传播一个好消息:云计算已白菜价啦!阿里云,腾讯云服务器最低不到300元/年。整理了一份云计算产品优惠活动,来不及解释了,赶紧上车!
作者:疯狂的阿金
链接:https://juejin.im/post/5bc937285188255c63763ae2
来源:掘金
初学者可能不知道的vue技巧的更多相关文章
- [iOS翻译]《iOS 7 Programming Pushing the Limits》系列:你可能不知道的Objective-C技巧
简介: 如果你阅读这本书,你可能已经牢牢掌握iOS开发的基础,但这里有一些小特点和实践是许多开发者并不熟悉的,甚至有数年经验的开发者也是.在这一章里,你会学到一些很重要的开发技巧,但这仍远远不够,你还 ...
- 漫谈程序员(十一)老鸟程序员知道而新手不知道的小技巧之Web 前端篇
老鸟程序员知道而新手不知道的小技巧 Web 前端篇 常充电!程序员只有一种死法:土死的. 函数不要超过50行. 不要一次性写太多来不及测的代码,而是要写一段调试一段. UI和编码要同步做. 多写注释方 ...
- [No0000194]聊聊 Chrome DevTools 中你可能不知道的调试技巧
对于前端开发者来说,ChromeDevTools 绝对是不可或缺的调试工具,我们常用的调试方法包含一些console等,而ChromeDevTools 其实很强大,下面来聊聊一些你可能不知道的debu ...
- Vue初学者可能不知道的坑
1.setTimeout/ setInterval 场景一 :this指向改变无法用this访问vue实例 mounted(){ setTimeout( function () { //setInte ...
- 你可能不知道的 Mac 技巧 - 文本操作
找不到 Mac 上的 Home,End,PageUp?想截图还得打开 QQ?不知道 Mac 如何剪切文件?找不到全屏窗口的按钮?找不到隐藏文件夹?不知道如何向后删除?想少用鼠标,多用键盘?…… 希望我 ...
- iPhone 上你可能还不知道的小技巧
用了这么久的 iPhone,这些技巧你可能都还不知道哦. 1.怎么用耳机切歌? 将耳机的话筒部位的中间(平时暂停用的,按一下)连按两下 即可. 连按两下,下一首. 连按三下,上一首. 2.摇一摇,相当 ...
- 你可能不知道的 Python 技巧
英文 | Python Tips and Trick, You Haven't Already Seen 原作 | Martin Heinz (https://martinheinz.dev) 译者 ...
- 你可能不知道的 transition 技巧与细节
CSS 中,transition 属性用于指定为一个或多个 CSS 属性添加过渡效果. 最为常见的用法,也就是给元素添加一个 transition,让其某个属性从状态 A 变化到状态 B 时,不再是非 ...
- 【转载】14个你可能不知道的 JavaScript 调试技巧
了解你的工具可以极大的帮助你完成任务.尽管 JavaScript 的调试非常麻烦,但在掌握了技巧 (tricks) 的情况下,你依然可以用尽量少的的时间解决这些错误 (errors) 和问题 (bug ...
随机推荐
- Linux时间子系统之四:定时器的引擎:clock_event_device【转】
本文转载自:http://blog.csdn.net/droidphone/article/details/8017604 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] ...
- HUST1017 Exact cover —— Dancing Links 精确覆盖 模板题
题目链接:https://vjudge.net/problem/HUST-1017 1017 - Exact cover 时间限制:15秒 内存限制:128兆 自定评测 7673 次提交 3898 次 ...
- [原创]java获取word文档的条目化内容
在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VB ...
- BZOJ3355
3355: [Usaco2004 Jan]有序奶牛 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 37 Solved: 19[Submit][Sta ...
- Park Visit(树的直径)
传送门 Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- struct 结构体解析(原)
(一)基本概念 结构体是一个或是多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组合在一个名字之下.我们将关键字struct引入了结构声明中.结构声明包含在花括号内的一系列声明组成 ...
- 【转】[钉钉通知系列]Jenkins发布后自动通知
转载请注明出处:https://www.cnblogs.com/jianxuanbing/p/7211006.html 阅读目录 一.前言 二.使用钉钉推送的优势 三.配置 一.前言 最近使用Jenk ...
- 【旧文章搬运】Windows句柄分配算法(二)
原文发表于百度空间,2009-04-04========================================================================== 在创建句柄 ...
- Spring AOP schema找不到报错 原
转自:https://my.oschina.net/zetaplusae/blog/144821 使用jersey+spring构建RESTful服务,并将应用部署在不能连接外网的服务器上.部署时,报 ...
- “玲珑杯”线上赛 Round #17 河南专场 B:震惊,99%+的中国人都会算错的问题(容斥计算)
传送门 题意 略 分析 是一道稍微变形的容斥题目,容斥一般的公式 \[ans=\sum_iAi-\sum_{i<j}{Ai∩Aj}+\sum_{i<j<k}{Ai∩Aj∩Ak}+.. ...