浅谈vue使用axios的回调函数中this不指向vue实例,为undefined


Posted in Javascript onSeptember 21, 2020

今天在vue-cli脚手架搭建的项目中使用axios时,遇到无法解析this.$route的报错信息,最后发现是作用域的问题。

1.解决方法:使用 =>

原代码:

axios.get('/user', {
  params: {
   ID: 12345
  }
 })
 .then(function (response) {
  console.log(response);
 })
 .catch(function (error) {
  console.log(error);
 });

修改为:

axios.get('/user', {
  params: {
   ID: 12345
  }
 })
 .then((response) => {
  console.log(response);
 })
 .catch((error) => {
  console.log(error);
 });

2.=>解析

在JS中,箭头函数并不是简单的function(){}匿名函数的简写语法糖,实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,在编写函数时就已经确定了,由上下文确定。而匿名函数的this指向运行时实际调用该方法的对象,无法在编写函数时确定。

不可以当做构造函数,也就是说,不可以使用 new 命令,否则会抛出错误。

this、arguments、caller等对象在函数体内都不存在。

不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

箭头函数除了传入的参数之外,其它的对象都没有!在箭头函数引用了this、arguments或者参数之外的变量,那它们一定不是箭头函数本身包含的,而是从父级作用域继承的。

补充知识:axios 中请求的回调函数中的this指针问题

请看下面两组代码

this.axios.post(url, data)
.then(function(result) {
var resData = result.data
console.log(resData)
if (resData.status === 1) {
} else {
}
})
.catch(function (error) {
console.log(error)
})

this.axios.post(url, data)
.then((result) => {
var resData = result.data
console.log(resData)
if (resData.status === 1) {
} else {
}
})
.catch(function (error) {
console.log(error)
})

这两组代码的差别在于:请求成功后的回调函数,一个使用匿名函数,一个使用箭头函数

匿名函数的指针指向->函数操作的本身

箭头函数的指针指向->组件

也就是说当你需要使用到组件中声明的变量或者函数,就需要使用箭头函数

以上这篇浅谈vue使用axios的回调函数中this不指向vue实例,为undefined就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Extjs407 getValue()和getRawValue()区别介绍
May 21 Javascript
JavaScript中的this关键字介绍与使用实例
Jun 21 Javascript
Node.js开发指南中的简单实例(mysql版)
Sep 17 Javascript
编写简单的jQuery提示插件
Dec 21 Javascript
JavaScript操作URL的相关内容集锦
Oct 29 Javascript
详解JavaScript对象和数组
Dec 03 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
Sep 07 Javascript
基于vue-router 多级路由redirect 重定向的问题
Sep 03 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
Vue.js原理分析之nextTick实现详解
Sep 07 Javascript
详解React的回调渲染模式
Sep 10 Javascript
vue大型项目之分模块运行/打包的实现
Sep 21 #Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
Sep 21 #Javascript
JS实现小米轮播图
Sep 21 #Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
Sep 21 #Javascript
vue组件入门知识全梳理
Sep 21 #Javascript
Ajax获取node服务器数据的完整步骤
Sep 20 #Javascript
微信小程序获取当前时间及星期几的实例代码
Sep 20 #Javascript
You might like
php empty函数 使用说明
2009/08/10 PHP
用php实现的下载css文件中的图片的代码
2010/02/08 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
php测试kafka项目示例
2020/02/06 PHP
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
python中__slots__用法实例
2015/06/04 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
Django权限机制实现代码详解
2018/02/05 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
PyTorch实现AlexNet示例
2020/01/14 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
Java程序开发中如何应用线程
2016/03/03 面试题
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers
Python使用pyecharts控件绘制图表
2022/06/05 Python