解决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 工具库 Cloudgamer JavaScript Library v0.1 发布
Oct 29 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
Aug 13 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
Aug 28 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
Mar 07 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
jQuery 3.0 的 setter和getter 模式详解
Jul 11 Javascript
JS使用onerror捕获异常示例
Aug 03 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
在Vue组件中使用 TypeScript的方法
Feb 28 Javascript
vue中实现先请求数据再渲染dom分享
Mar 17 Javascript
JS实现购物车基本功能
Nov 08 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下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
php中Ctype函数用法详解
2014/12/09 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
Python中unittest用法实例
2014/09/25 Python
python使用str & repr转换字符串
2016/10/13 Python
使用tensorflow实现AlexNet
2017/11/20 Python
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
学生党员的自我评价范文
2014/03/01 职场文书
应用心理学专业求职信
2014/08/04 职场文书
检讨书格式
2019/04/25 职场文书
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS