浅谈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 相关文章推荐
鼠标图片振动代码
Jul 06 Javascript
javascript 选择文件夹对话框(web)
Jul 07 Javascript
js解析与序列化json数据(二)序列化探讨
Feb 01 Javascript
JavaScript检测并限制复选框选中个数的方法
Aug 12 Javascript
js生成随机数的方法实例
Oct 16 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
Mar 04 Javascript
移动端效果之IndexList详解
Oct 20 Javascript
解决vue-router中的query动态传参问题
Mar 20 Javascript
Webpack设置环境变量的一些误区详解
Dec 19 Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 Javascript
JS+CSS实现动态时钟
Feb 19 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者的疑难问答(2)
2006/10/09 PHP
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
Python读取properties配置文件操作示例
2018/03/29 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python中的数据结构比较
2019/05/13 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
售后专员岗位职责
2013/12/08 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
药学职务聘任书
2014/03/29 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
九华山导游词
2015/02/03 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
Python实现为PDF去除水印的示例代码
2022/04/03 Python
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android
python语言中pandas字符串分割str.split()函数
2022/08/05 Python