解决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静态的url如何传递
May 03 Javascript
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
点图片上一页下一页翻页效果
Jul 09 Javascript
jQuery操作checkbox选择(list/table)
Apr 07 Javascript
JS简单实现登陆验证附效果图
Nov 19 Javascript
JavaScript获取当前页面上的指定对象示例代码
Feb 28 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
原生js实现查询天气小应用
Dec 09 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
Aug 17 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
Jun 25 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遍历文件夹与子目录的函数代码
2011/09/26 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
实例详解Python模块decimal
2019/06/26 Python
python创建子类的方法分析
2019/11/28 Python
virtualenv介绍及简明教程
2020/06/23 Python
python 字符串格式化的示例
2020/09/21 Python
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
企划经理的岗位职责
2013/11/17 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
二胎满月酒致辞
2015/07/29 职场文书
社区干部培训心得体会
2016/01/06 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书