解决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 单例/单体模式(Singleton)
Apr 07 Javascript
javascript解析json实例详解
Nov 05 Javascript
浅谈 javascript 事件处理
Jan 04 Javascript
深入浅出分析javaScript中this用法
May 09 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
Dec 28 Javascript
javascript事件的绑定基础实例讲解(34)
Feb 14 Javascript
js实现数字递增特效【仿支付宝我的财富】
May 05 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
May 11 Javascript
JS随机排序数组实现方法分析
Oct 11 Javascript
Bootstrap模态对话框中显示动态内容的方法
Aug 10 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
解决layer.msg 不居中 ifram中的问题
Sep 05 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代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
python表格存取的方法
2018/03/07 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python中一般处理中文的几种方法
2019/03/06 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
strlen的几种不同实现方法
2013/05/31 面试题
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
学生学习总结的自我评价
2013/10/22 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
京剧自荐信
2014/01/26 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
我的中国心演讲稿
2014/09/04 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
承诺函范文
2015/01/21 职场文书
《所见》教学反思
2016/02/23 职场文书