mounted(){ setTimeout( function () { //setInterval同理 console.log(this); //此时this指向Window对象 },1000) ; }
//箭头函数访问this实例由于箭头函数自己没有绑定this setTimeout(() => { console. log(this);}, 500) ; //使用变量访问this实例let self=this; },1000); setTimeout (function () { console. log(self);//使用self变量访问this实例 }, 1000) ;
场景一 :好比一些弹幕,走马灯文字,这类须要定时调用的,路由跳转以后,由于组件已经销毁了,可是setlnterval尚未销毁,还在继续后台调用,控制台会不断报错,若是运算量大的话,没法及时清除,会致使严重的页面卡顿。javascript
created() { this.intervalid = setInterval(() => { this.layerError = ""; this.Timer = null; }, 100000); } beforeDestroy( ){ //我一般是把setInterval( )定时器赋值给this实例,而后就能够像下面这么暂停。 clearInterval(this.intervalid); }
场景一 :为了防止用户忽然离开,没有保存已输入的信息。css
//在路由组件中:mounted(){}, beforeRouteLeave (to, from, next) { if(用户已经输入信息){ //出现弹窗提醒保存草稿,或者自动后台为其保存 }else{ next(true);//用户离开 } }
<template> <el-progress type="circle" :percentage=“0" @click="stopProgress"> </elprogress> </template> <script> export default { methods:{ stopProgress() { console.log('中止') } } } </script>
<template> <el-progress type="circle" :percentage="0" @click.native="stopProgress"></el-progress> </template> <script> export default { methods:{ stopProgress() { console.log('中止') } } } </script>
场景一 :一些自定义组件,须要去获取组件对象进行一些其余的Dom操做vue
<template> <el-progress type="circle" :percentage="O" ref="progress"></el-progress></template> <script> this.$refs.progress //组件对象实例, 能够手动调用组件的内置方法和属性 this.$refs.progress.$el //组件 对象的最外层dom元素 </script>
在样式中设置完scoped在浏览器解析为以下图这样,a是个div,a div里面包含一个组件里面解析完了div的样式名字为b,想在父组件影响到子组件的默认样式。解决方法:java
<style scoped> .a >>> .b { /* ... */ } </style> //有些像Sass之类的预处理器没法正确解析>>>。这种状况下你能够使用/deep/操做符取而代之- - - -这是一个>>>的别名,一样能够正常工做。 <style scoped lang=“scss”> .a /deep/ .b { /* ... */ } </style>
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'}
解决方法 :数组
<!– 在双花括号中 –> <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") } } }
场景一 :在watch里面监测对象里面对应的值是监测不到的,能够用以下方法。浏览器
watch: { obj: { handler(val, oldVal) { console.log('属性变化触发这个回调;',val, oldVal); }, deep: true // 监测这个对象中每个属性的变化 }, step: { // 属性 //watch handler(val, oldVal) { console.log('默认触发一次', val, oldVal); }, immediate: true // 默认触发一次 } }</cod e>
参考连接:https://www.vue-js.com/topic/5be446a7fffaa30f33091cf1缓存