送给vue初学者的 vue.js技巧
1.setTimeout/ setInterval
场景一 :this指向改变无法用this访问vue实例
mounted(){setTimeout( function () {//setInterval同理console.log(this); //此时this指向Window对象},1000) ;}
解决方法 :使用箭头函数或者缓存this
//箭头函数访问this实例因为箭头函数本身没有绑定thissetTimeout(() => {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: { // 属性 //watchhandler(val, oldVal) {console.log("默认触发一次", val, oldVal);},immediate: true // 默认触发一次}}
作者:Jeby Sun http://www.cnblogs.com/jebysun/p/9816168.html
送给vue初学者的 vue.js技巧的更多相关文章
- 总结vue知识体系之实用技巧
vue 作为目前前端三大框架之一,对于前端开发者可以说是必备技能.那么怎么系统地学习和掌握 vue 呢?为此,我做了简单的知识体系体系总结,不足之处请各位大佬多多包涵和指正,如果喜欢的可以点个小赞!本 ...
- Vue 浅谈前端js框架vue
Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...
- Atom 编辑器安装 linter-eslint 插件,并配置使其支持 vue 文件中的 js 格式校验
安装方式有如下几种. 1.最常用的安装方式. # 进入atom插件文件夹 cd ~/.atom/packages/ # git clone 插件源文件 git clone https://github ...
- 【Vue】转-Vue.js经典开源项目汇总
版权声明:本文为EnweiTech原创文章,未经博主允许不得转载. https://blog.csdn.net/English0523/article/details/88694219 Vue是什么? ...
- chrome浏览器的VUE调试插件Vue.js devtools
chrome浏览器的VUE调试插件Vue.js devtools 应用商店直接安装 安装成功后在VUE文件打开可以直接调试: 提示效果如下: F12进入调试状态即可: 安装中出现的问题: 插件安装 ...
- vue教程3-04 vue.js vue-devtools 调试工具的下载安装和使用
vue教程3-04 vue.js vue-devtools vue调试工具的安装和使用 一.vue-devtools 下载与安装 1.需要 fan qiang 2.打开谷歌浏览器设置--->扩展 ...
- vue中config/index.js:配置的详细理解
当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面 (环境变量及其基本变量的配置) var path = require('path') ...
- vue - webpack.base.conf.js
描述:webapck基本配置文件. 为了给开发文件和打包文件(webpack.dev.conf.js|| webpack.prod.conf.js) 提供方便. 'use strict' // 路径 ...
- vue开发工具node.js及构建工具webpack
1.概念 node.js:可以运行JavaScript的服务平台,可以把它当做一个后端程序,只是它的开发语言是JavaScript (通常情况下,JavaScript的运行环境都是浏览器,因此Java ...
随机推荐
- eDP接口简介
1. eDP背景介绍 随着显示分辨率的越来越高,传统的VGA.DVI等接口逐渐不能满足人们的视觉需求. 随后就产生了以HDMI.DisplayPort为代表的新型数字接口,外部接口方面HDMI占据 ...
- JS 学习笔记(二)Ajax的简单使用
使用Ajax访问本地TXT文件 ajax.js // 创建请求对象 var ajax = new XMLHttpRequest(); // 建立连接 ajax.open('get', 'test.tx ...
- Pyserial 学习
# 连接串口 ser = serial.Serial("COM12", 115200, timeout=0.5, bytesize=8, parity=serial.PARITY_ ...
- VBA---文件操作
Text文件操作 Workbooks.OpenText() 载入一个文本文档,并将其作为包含单个工作表的新工作簿进行分列处理. 语法: 表达式.OpenText(Filename,StartRow, ...
- CSP-J/S 2021 游记
\(\large\texttt{Day -1}\) 晚上好累啊,去集训了,回来之后发现十一点了还码了一会儿,只能祈求上帝明天不会打瞌睡. \(\large\texttt{Day 0}\) 意料中的事情 ...
- 如何使用webgl(three.js)实现3D储能,3D储能站,3D智慧储能、储能柜的三维可视化解决方案——第十七课
前言 上节课我们讲了<3D光伏发电>,与之配套的就是能量存储 这节课我们主要讲讲储能,储能站,在分布式能源系统中起到调节用对电的尖峰平谷进行削峰填谷的作用.特别是小型储能站,更加灵活,因地 ...
- elasticsearch多字段聚合实现方式
目录 1.背景 2.实现多字段聚合的思路 3.需求 4.数据准备 4.1 创建索引 4.2 准备数据 5.实现方式 5.1 multi_terms实现 5.1.1 dsl 5.1.2 java 代码 ...
- 有趣的 Go HttpClient 超时机制
hello,大家好呀,我是既写 Java 又写 Go 的小楼,在写 Go 的过程中经常对比这两种语言的特性,踩了不少坑,也发现了不少有意思的地方,今天就来聊聊 Go 自带的 HttpClient 的超 ...
- 云原生之旅 - 14)遵循 GitOps 实践的好工具 ArgoCD
前言 Argo CD 是一款基于 kubernetes 的声明式的Gitops 持续部署工具. 应用程序定义.配置和环境都是声明式的,并受版本控制 应用程序部署和生命周期管理都是自动化的.可审计的,并 ...
- [排序算法] 简单选择排序 (C++)
简单选择排序原理 简单选择排序 SelectSort 是一种十分直观地排序方法.其原理是每次从未排序的元素中找到当前最小的元素,放在当前未排序序列的首位.一直重复操作直至最后未排序的元素个数为 0,即 ...
