无法在 VUEJS 2 的 Axios POST 方法中访问 "this"
Cannot access "this" in Axios POST method in VUEJS 2
我不明白为什么我无法在Axios的POST方法的回调响应中访问我的数据。
我在这里尝试在错误服务器响应上打印一条错误消息,但它在捕获错误函数中说 "this" 未定义
这是我的代码:
<template>
<div class="row">
<div class="form-group">
<label for="exampleInputEmail1">Login</label>
<input type="text" v-model="loginForm" class="form-control" id="exampleInputEmail1" placeholder="login">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" v-model="passwordForm" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<button @click="submitForm();" class="btn btn-default">Submit</button>
<div class="row" v-if="errorBool" style="color:red;"></div>
</div>
</template>
<script>
import store from '../../store/store.js'
import Vuex from 'vuex'
import axios from 'axios'
export default {
store: store,
name: 'Login',
data () {
return {
msg: 'Welcome to Login page',
passwordForm: 'admin',
loginForm: 'admin',
errorBool: false,
errorMessage : ''
}
},
computed: {
...Vuex.mapGetters([
'authentification'
]),
},
methods: {
...Vuex.mapActions([
'loadToken',
'isAuth',
'isNotAuth'
]),
submitForm : function() {
axios.post('http://127.0.0.1:5000/login', {
name: this.loginForm,
password: this.passwordForm
})
.then((response) => {
this.loadToken({token: response.data.token})
this.isAuth()
this.$router.push('/dashboard')
this.errorBool = false
})
.catch(function (error) {
console.log(this) // undefinided
this.errorBool = true
this.errorMessage = error
this.isNotAuth()
})
}
},
}
</script>
就像您为 then
回调所做的那样,您应该为 catch
回调使用箭头函数,否则您将失去所需的 this
绑定。
Promises/A+ specs, point 2.2.5 指定关于两个 then
回调参数:
onFulfilled
and onRejected
must be called as functions (i.e. with no this
value).3.2
3.2 That is, in strict mode this
will be undefined
inside of them; in sloppy mode, it will be the global object.
这同样适用于 catch
,这只是使用 then
.
的第二个参数的另一种方式
这样写:
.catch( error => {
console.log(this) // <-- problem solved.
this.errorBool = true
this.errorMessage = error
this.isNotAuth()
})
我不明白为什么我无法在Axios的POST方法的回调响应中访问我的数据。
我在这里尝试在错误服务器响应上打印一条错误消息,但它在捕获错误函数中说 "this" 未定义
这是我的代码:
<template>
<div class="row">
<div class="form-group">
<label for="exampleInputEmail1">Login</label>
<input type="text" v-model="loginForm" class="form-control" id="exampleInputEmail1" placeholder="login">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" v-model="passwordForm" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<button @click="submitForm();" class="btn btn-default">Submit</button>
<div class="row" v-if="errorBool" style="color:red;"></div>
</div>
</template>
<script>
import store from '../../store/store.js'
import Vuex from 'vuex'
import axios from 'axios'
export default {
store: store,
name: 'Login',
data () {
return {
msg: 'Welcome to Login page',
passwordForm: 'admin',
loginForm: 'admin',
errorBool: false,
errorMessage : ''
}
},
computed: {
...Vuex.mapGetters([
'authentification'
]),
},
methods: {
...Vuex.mapActions([
'loadToken',
'isAuth',
'isNotAuth'
]),
submitForm : function() {
axios.post('http://127.0.0.1:5000/login', {
name: this.loginForm,
password: this.passwordForm
})
.then((response) => {
this.loadToken({token: response.data.token})
this.isAuth()
this.$router.push('/dashboard')
this.errorBool = false
})
.catch(function (error) {
console.log(this) // undefinided
this.errorBool = true
this.errorMessage = error
this.isNotAuth()
})
}
},
}
</script>
就像您为 then
回调所做的那样,您应该为 catch
回调使用箭头函数,否则您将失去所需的 this
绑定。
Promises/A+ specs, point 2.2.5 指定关于两个 then
回调参数:
onFulfilled
andonRejected
must be called as functions (i.e. with nothis
value).3.23.2 That is, in strict mode
this
will beundefined
inside of them; in sloppy mode, it will be the global object.
这同样适用于 catch
,这只是使用 then
.
这样写:
.catch( error => {
console.log(this) // <-- problem solved.
this.errorBool = true
this.errorMessage = error
this.isNotAuth()
})