解决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 相关文章推荐
在JavaScript中使用inline函数的问题
Mar 08 Javascript
jQuery select的操作实现代码
May 06 Javascript
简单的两种Extjs formpanel加载数据的方式
Nov 09 Javascript
jqGrid读取选择的多行的某个属性代码
May 18 Javascript
PHP实现的各种中文编码转换类分享
Jan 23 Javascript
jquery mobile 移动web(5)
Dec 20 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
js实现炫酷的左右轮播图
Jan 18 Javascript
js实现简单的手风琴效果
Feb 27 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 Javascript
clipboard在vue中的使用的方法示例
Oct 19 Javascript
Vue Element校验validate的实例
Sep 21 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
在PHP中使用redis
2013/11/04 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
Laravel下生成验证码的类
2017/11/15 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
js重写方法的简单实现
2016/07/10 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
微信跳一跳游戏python脚本
2020/04/01 Python
python中set()函数简介及实例解析
2018/01/09 Python
wxPython之解决闪烁的问题
2018/01/15 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
python操作redis数据库的三种方法
2020/09/10 Python
要账委托书范本
2014/09/15 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python