解决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 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
javascript之dhDataGrid Ver2.0.0代码
Jul 01 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 Javascript
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
js修改table中Td的值(定义td的双击事件)
Jan 10 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
Sep 27 Javascript
js 通过cookie实现刷新不变化树形菜单
Oct 30 Javascript
JavaScript优化专题之Loading and Execution加载和运行
Jan 20 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
Nov 03 Javascript
看看“疫苗查询”小程序有温度的代码
Jul 31 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
JavaScript实现像雪花一样的Hexaflake分形
Jul 07 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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
smarty简单应用实例
2015/11/03 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
pageGroup.js实现分页功能
2019/07/27 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python里隐藏的“禅”
2014/06/16 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
python生成ppt的方法
2018/06/07 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python实现图片拼接的代码
2018/07/02 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
运动会通讯稿50字
2014/01/30 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
小学课改工作总结
2015/08/13 职场文书