解决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 相关文章推荐
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
没有document.getElementByName方法
Aug 19 Javascript
angularJS中$apply()方法详解
Jan 07 Javascript
js实现缓冲运动效果的方法
Apr 10 Javascript
javascript+ajax实现产品页面加载信息
Jul 09 Javascript
js实现简单折叠、展开菜单的方法
Aug 28 Javascript
百度地图给map添加右键菜单(判断是否为marker)
Mar 04 Javascript
JS变量及其作用域
Mar 29 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
响应式框架Bootstrap栅格系统的实例
Dec 19 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 Javascript
Vue数据绑定简析小结
May 07 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横向重复区域显示二法
2008/09/25 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP实现的json类实例
2015/07/28 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
DOM相关内容速查手册
2007/02/07 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
全面理解闭包机制
2016/07/11 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
小程序实现列表倒计时功能
2021/01/29 Javascript
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
今冬明春火灾防控工作方案
2014/05/29 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
大国崛起英国观后感
2015/06/02 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js