浅谈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 相关文章推荐
JQuery 常用操作代码
Mar 14 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
Apr 25 Javascript
jQuery拖动布局其结果保存到数据库
Oct 09 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
May 26 Javascript
jQuery+ajax读取并解析XML文件的方法
Sep 09 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
JS实现重新加载当前页面
Nov 29 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
简单实现js轮播图效果
Jul 14 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 Javascript
js实现坦克大战游戏
Feb 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
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
完美的php分页类
2017/10/24 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
python脚本内运行linux命令的方法
2015/07/02 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
python实现图片转字符画
2021/02/19 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
const和static readonly区别
2013/05/20 面试题
工地门卫岗位职责
2013/12/30 职场文书
教师现实表现材料
2014/02/14 职场文书
关于运动会的口号
2014/06/07 职场文书
元旦晚会活动总结
2014/07/09 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
2014年工人工作总结
2014/11/25 职场文书
2014年生产部工作总结
2014/12/17 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL