未捕获(承诺)TypeError:无法读取未定义的属性“电子邮件”

时间:2018-07-03 23:34:21

标签: javascript vue.js

我正在使用带有laravel的vuejs应用程序,但是我无法真正从对象中获取组件,我应该怎么做

<script>
import axios from 'axios';
export default {
    data : function (){
        return {
            email: '',
            password: '',
            remember: 'true',
            errors: [],
        }
    },
    methods : {
        validateemail(mail){
            var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
            return re.test(mail);
        },
        attemptlogin(){
            this.errorsarray = [];
            axios.post('/login', {
                email: this.email,
                password: this.password,
                remember : this.remember
            }).then(function (response) {
                    location.reload();
                }).catch(function (error) {
                var code = error.response.status;
                console.log(this.email);
                    if(code == 422){


                        this.errors.push("Incorrect information");

                    }else{
                        console.log('no');
                        this.errors.push('Internal server error please try again later')
                    }
                }).then(function () {
                console.log('here');
            });
        },
    },
    computed : {
        isValidInput() {

            return this.validateemail(this.email) && this.password;
        }
    }
}

它还会显示这种错误

  

未捕获(承诺)TypeError:无法读取未定义的属性“电子邮件”

我不知道为什么会有帮助? 预先感谢

1 个答案:

答案 0 :(得分:1)

使用() => {}函数语法而不是function() {}。前者将正确绑定this

.catch(error => {
    console.log(this.email);
})

如果要使用function() {},则必须显式绑定this

.catch(function (error) {
    console.log(this.email);
}.bind(this))

有关bind的更多信息,请参见this answer