解决vue的变量在settimeout内部效果失效的问题


Posted in Javascript onAugust 30, 2018

解决方法如下:

1、定义一个self暂存this

2、再改变变量的值,则生效啦

var self=this;
    this.toastrVal = inVal;
    this.loadState = true;
    this.noBg = bgState;
    setTimeout(function () {
     self.loadState = false;
    }, 3000)

拓展知识:解决vue在setTimeout内修改this失效的问题

当在vue中使用定时器来修改一个变量值的时候,发现没有效果,这是由于setTimeout函数调用的代码运行在与所在函数完全分离的执行环境上,这会使得this指向的是window对象。

要想setTimeout指向正确的值,可以使用如下方法:

1、使用箭头函数

export default {
 data () {
  return {
   left: -9999,
   bottom: -9999
  }
 },
 methods: {
  cancelMask: function () {
   setTimeout(() => {
    this.bottom = 0;
    this.left = 0;
   }, 500);
  }
 }
}

此时函数的this指向的是定义它的时候的对象,也就是this指向了data内中对应的变量。

2、将当前对象的this保存为一个变量

export default {
 data () {
  return {
   left: -9999,
   bottom: -9999
  }
 },
 methods: {
  cancelMask: function () {
   var that = this;
   setTimeout(function () {
    that.bottom = 0;
    that.left = 0;
   }, 500);
  }
 }
}

方法中将this存在一个对象中,此时执行setTimeout函数时,setTimeout函数内的that就会访问到这个变量,就会得到当前对象。

以上这篇解决vue的变量在settimeout内部效果失效的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
jQuery动画animate方法使用介绍
May 06 Javascript
javascript中数组的sort()方法的使用介绍
Dec 18 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
Javascript数组Array方法解读
Mar 13 Javascript
简单讲解jQuery中的子元素过滤选择器
Apr 18 Javascript
Bootstrap栅格系统的使用和理解2
Dec 14 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
Oct 11 Javascript
解决vue 项目引入字体图标报错、不显示等问题
Sep 01 Javascript
ES6基础之字符串和函数的拓展详解
Aug 22 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
Sep 30 Javascript
openlayers实现地图弹窗
Sep 25 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
Aug 30 #Javascript
详解React native fetch遇到的坑
Aug 30 #Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 #Javascript
原生JS实现简单的倒计时功能示例
Aug 30 #Javascript
JavaScript fetch接口案例解析
Aug 30 #Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 #Javascript
原生JS实现的简单小钟表功能示例
Aug 30 #Javascript
You might like
PHP合并discuz用户脚本的方法
2015/08/04 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
js函数般调用正则
2008/04/08 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
python实现k-means聚类算法
2018/02/23 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
python中upper是做什么用的
2020/07/20 Python
Python json格式化打印实现过程解析
2020/07/21 Python
python实现学生管理系统开发
2020/07/24 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
劳资人员岗位职责
2013/12/19 职场文书
办理退休介绍信
2014/01/09 职场文书
学校岗位设置方案
2014/01/16 职场文书
公务员诚信承诺书
2014/05/26 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
MySQL的join buffer原理
2021/04/29 MySQL