浅谈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 相关文章推荐
JS Timing
Apr 21 Javascript
Javascript String.replace的妙用
Sep 08 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 Javascript
javascript数组去重方法分析
Dec 15 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
详解如何为你的angular app构建一个第三方库
Dec 07 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 Javascript
JQuery属性操作与循环用法示例
May 15 jQuery
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 Javascript
webpack4 optimization使用总结
Nov 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
JS定义函数的几种常用方法小结
2019/05/23 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
python实用代码片段收集贴
2015/06/03 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
python3字符串输出常见面试题总结
2020/12/01 Python
C语言笔试集
2012/07/24 面试题
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
介绍一下如何优化MySql
2016/12/20 面试题
大学毕业生工作的自我评价
2013/10/01 职场文书
综合测评自我鉴定
2013/10/08 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
和睦家庭事迹
2014/05/14 职场文书
兽医医药专业求职信
2014/07/27 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技