浅谈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 相关文章推荐
DWR Ext 加载数据
Mar 22 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
Apr 03 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
用js写的一个路由(简单实例)
Sep 24 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
详解微信小程序Page中data数据操作和函数调用
Sep 27 Javascript
详解vue渲染函数render的使用
Dec 12 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
Mar 04 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
通过实例学习React中事件节流防抖
Jun 17 Javascript
vue 移动端注入骨架屏的配置方法
Jun 25 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
php strtotime 函数UNIX时间戳
2009/01/14 PHP
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
python爬取网易云音乐评论
2018/11/16 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
求职简历自荐信
2013/10/20 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
实习证明格式范文
2015/06/16 职场文书
培训简讯范文
2015/07/20 职场文书
高中地理教学反思
2016/02/19 职场文书
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记