解决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 相关文章推荐
javascript web对话框与弹出窗口
Feb 22 Javascript
jQuery插件开发详细教程
Jun 06 Javascript
轻松实现js图片预览功能
Jan 18 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 jQuery
基于JavaScript实现的插入排序算法分析
Apr 14 Javascript
Vuex中mutations与actions的区别详解
Mar 01 Javascript
js中数组常用方法总结(推荐)
Apr 09 Javascript
vue实现点击追加选中样式效果
Nov 01 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 Javascript
微信小程序input抖动问题的修复方法
Mar 03 Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
Jun 02 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
FleaPHP的安全设置方法
2008/09/15 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
ipython和python区别详解
2019/06/26 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
python属于软件吗
2020/06/18 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
若干个Java基础面试题
2015/05/19 面试题
学生自我鉴定范文
2013/10/04 职场文书
大学活动策划书范文
2014/01/10 职场文书
银行实习生的自我评价
2014/01/13 职场文书
捐书倡议书
2014/08/29 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
售房协议书范本2014
2014/10/23 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
盗窃案辩护词
2015/05/21 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript