解决vue侦听器watch,调用this时出现undefined的问题


Posted in Javascript onOctober 30, 2020

watch侦听器中,我们要将新的值赋给this.a出错

watch: {
 value: (newV, oldV) => {
 this.a = newV;
 }
}

这里报错undefined,这里错误的原因是不能写成箭头函数。写成箭头函数后,this会取上下文,而不是组件里面的this了,正确写法为:

watch: {
 value: function(newV, oldV) {
 this.a = newV;
 }
}

如下图:

解决vue侦听器watch,调用this时出现undefined的问题

看考链接:https://cn.vuejs.org/v2/api/#watch

PS:好吧,虽然问题可以解决,但是具体为什么不能写成箭头函数,讲实话,我现在也不懂,知道原理的可以给我评论,非常感谢。

来自yyf994的评论解答:

var app = new Vue({
   el: '#app',
   data: {
    a: 1
   },
 
   watch: {
    a:()=> {
     console.log(this)
    }
   },
 
   methods: {
    onClick() {
     this.a++;
    }
   } 
  })

在babel 编译后是这样子的

"use strict"; 
var _this = void 0; 
var app = new Vue({
 el: '#app',
 data: {
 a: 1
 },
 watch: {
 a: function a() {
  console.log(_this);
 }
 },
 methods: {
 onClick: function onClick() {
  this.a++;
 }
 }
});

因为箭头函数 的 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

补充知识:vue watch用法和没反应的原因 =>看看下面是不是还有一个watch

我就废话不多说了,大家还是直接看代码吧~

watch: { 
 stop: function(newVal, old){ //非josn用法
   console.log(newVal)
  },
 'form.fdnDct': function(newVal, old){ //josn用法
   console.log(newVal)
  },
 }

 //这也是一种用法
 watch: {
  'browse_integral_info.buy':'RMB',     //购买积分转化成人民币
  'browse_integral_info.give':'GIVE',     //完成邀请浏览任务赠送
  'bargain_integral_info.give':'BARGAINGIVE',
  deep:true,
 },
 methods: {
  RMB: function(){ 
   this.RMBs = this.browse_integral_info.buy/100
  },
 },

以上这篇解决vue侦听器watch,调用this时出现undefined的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
自己的js工具 Event封装
Aug 21 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
Aug 27 Javascript
jQuery自动添加表单项的方法
Jul 13 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
Oct 16 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
node.js实现回调的方法示例
Mar 01 Javascript
js实现旋转木马效果
Mar 17 Javascript
xmlplus组件设计系列之按钮(2)
Apr 26 Javascript
webpack的CSS加载器的使用
Sep 11 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 Javascript
vue npm install 安装某个指定的版本操作
Aug 11 Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 #Javascript
JavaScript实现轮播图效果
Oct 30 #Javascript
vue组件添加事件@click.native操作
Oct 30 #Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 #Javascript
详解 javascript对象创建模式
Oct 30 #Javascript
ES6中的Javascript解构的实现
Oct 30 #Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 #Javascript
You might like
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
无数据库的详细域名查询程序PHP版(3)
2006/10/09 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
关于js类的定义
2011/06/28 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
基于python图像处理API的使用示例
2020/04/03 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
详解python中的异常和文件读写
2021/01/03 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
考试不及格检讨书
2014/01/09 职场文书
总经理助理工作职责
2014/02/06 职场文书
信访工作经验交流材料
2014/05/23 职场文书
新教师培训心得体会
2014/09/02 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
小学记事作文之200字
2019/08/06 职场文书