浅谈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 相关文章推荐
javascript new 需不需要继续使用
Jul 02 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
May 08 Javascript
基于jQuery的获得各种控件Value的方法
Nov 19 Javascript
javascript整除实现代码
Nov 23 Javascript
jQuery实现移动 和 渐变特效的点击事件
Feb 26 Javascript
基于JavaScript实现焦点图轮播效果
Mar 27 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
angularJs中ng-model-options设置数据同步的方法
Sep 30 Javascript
vue的keep-alive中使用EventBus的方法
Apr 23 Javascript
小程序实现简单语音聊天的示例代码
Jul 24 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一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
python持久性管理pickle模块详细介绍
2015/02/18 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
python 连续不等式语法糖实例
2020/04/15 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
工作建议书范文
2014/05/13 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python