vue使用axios中 this 指向问题

1.解决办法

在vue中使用axios做网络请求的时候,会遇到this不指向vue,而为undefined,可以使用箭头函数"=>"来解决。如下:

methods: {
      loginAction(formName) {
        this.$axios.post(‘http://127.0.0.1/u/subLogin‘, {
          username: this.username,
          password: this.password
        })
          .then(function(response){
               console.log(this); //这里 this = undefined
          })
          .catch((error)=> {
            console.log(error); //箭头函数"=>"使this指向vue
          });

        });
      }
}

2. 原因

ES6中的 箭头函数 "=>" 内部的this是词法作用域,由上下文确定(也就是由外层调用者vue来确定)。

3. 题外话

使用"=>"函数,就可以告别之前的两种写法了:

  1. bind(this)来改变匿名函数的this指向
  2. hack写法 var _this= this;
        loginAction(formName) {
            var _this= this;
            this.$axios.post("...")
              .then(function(response){
                   console.log(_this); //这里 _this 指向vue
              })
            });
          }

原文地址:http://blog.51cto.com/13523664/2060428

时间: 2024-08-09 22:29:25

vue使用axios中 this 指向问题的相关文章

axios中this指向为undefined的问题

今天遇到的一个坑. 需要在得到接口返回的值时根据这个值进行判断跳转 想当然的想要使用this.$router.push("/verifynumber");来进行跳转,但是发现并没有什么用 console.log了this发现是undefined. 后来发现在axios中直接使用this,指向与之前的是不一样的,网上有很多解决方法,包括使用箭头函数. 而我使用了在函数一开始定义let that = this保存this,然后在之后的代码里直接使用that就可以了. 原文地址:https:

Vue:Axios异步通信、计算属性、内容分发、自定义事件

1. Axios 什么是Axios Axios 是一个开源的可以用在浏览器端和 NodeJS 的异步通信框架,她的主要作用就是实现 AJAX 异步通信,其功能特点如下: 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API [JS中链式编程] 拦截请求和响应 转换请求数据和响应数据 取消请求 自动转换 JSON 数据 客户端支持防御 XSRF(跨站请求伪造) GitHub:https://github.com/axios/axio

Vue2.0与 [百度地图] 结合使用———vue+webpack+axios+百度地图实现组件之间的通信

Vue2.0与 [百度地图] 结合使用: 1.vue init webpack-simple vue-baidu-map 2.下载axios cnpm install axios; 3.在main.js中引入axios,并使用 import axios from 'axios' /* 把axios对象挂到Vue实例上面,其他组件在使用axios的时候直接 this.$http就可以了 */ Vue.prototype.$http = axios; 4.引入百度地图的js秘钥--->最好在inde

Vue框架axios请求(类似于ajax请求)

Vue框架axios get请求(类似于ajax请求) 首先介绍下,这个axios请求最明显的地方,通过这个请求进行提交的时候页面不会刷新 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="vue.js"></scr

vue+vuex+axios+echarts画一个动态更新的中国地图

一. 生成项目及安装插件 # 安装vue-cli npm install vue-cli -g # 初始化项目 vue init webpack china-map # 切到目录下 cd china-map # 安装项目依赖 npm install # 安装 vuex npm install vuex --save # 安装 axios npm install axios --save # 安装 ECharts npm install echarts --save 二. 项目结构 ├── ind

Vue在MVC中的进行前后端的交互

Vue在MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下个人使用Vue的一点经验,以便后来者借鉴! 官方文档:Vue.js 使用Vue在ASP.NET MVC中进行前后端交互在阅读下面的文章之前你需要先了解一下Vue官方推荐的前后端交互的插件: 1.resource(官方在2.0版本之后取消了对此插件的维护) 2.axios 注:这里使用的都是异步的插件,因为这样才会在

axios中post传参方式

最近做vue项目,做图片上传的功能,使用get给后台发送数据,后台能收到,使用post给后台发送图片信息的时候,vue axios post请求发送图片base64编码给后台报错HTTP 错误 414请求一直报错,显示 request URI too large后台显示一直没有收到数据 参数为null.网上查看了很多资料,才知道axios post传参的问题. this.$axios({ method: 'post', url:url, params: { is_iso:1, goods_id:

axios中取消请求

在平时的开发过程中,我们会经常遇到菜单切换的问题,在一些切换频率较低的情况下,在切换到另一个页面的时候,上一个页面基本没有未完成的异步请求,即时有,在一些情况下也是可以忽略的.但是,在一些切换频率较高的页面中,如果我们不处理这些未完成的请求,那么这些请求会极大的影响页面的性能,甚至导致之后的请求超时. 如果需要断开Javascript的ajax请求,一种是通过设置时间,超时自动断开,另一种我们可以调用XMLHttpRequest对象上的abort方法. 在使用Vue的过程中,大多是使用axios

vue+vue-router+axios+element-ui构建vue实战项目之七(渲染content.vue内容)

在上一节<vue+vue-router+axios+element-ui构建vue实战项目之六(渲染index.vue列表)>中,我们从后端接口获取数据,并成功渲染出一个列表. 这节内容,我们来做内容页面. 编写src/page/content.vue 文件 话不多说,直接上代码 1 <template> 2 <div> 3 <h3>{{getMsg.title}}</h3> 4 <p>作者:{{getMsg.author.login