浅谈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 相关文章推荐
ajax java 实现自动完成功能
Dec 19 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
纯js实现无限空间大小的本地存储
Jun 18 Javascript
深入学习AngularJS中数据的双向绑定机制
Mar 04 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
JS获取url参数、主域名的方法实例分析
Aug 03 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
Vue 父子组件、组件间通信
Mar 08 Javascript
ES10 特性的完整指南小结
Mar 04 Javascript
javascript单张多张图无缝滚动实例代码
May 10 Javascript
Postman参数化实现过程及原理解析
Aug 13 Javascript
vue 单页应用和多页应用的优劣
Oct 22 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
投票管理程序
2006/10/09 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
Angular实现form自动布局
2016/01/28 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
python实现简单登陆系统
2018/10/18 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
纪念9.18事变演讲稿
2014/09/14 职场文书
建国大业观后感
2015/06/01 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书