<template>
<div>
<el-row :gutter='20'>
<!-- gutter表式行间距 -->
</el-row>
<!-- span 是列栅格 -->
<el-row :gutter='20'>
<el-col :span='6' :offset='8'>
<el-form label-width="150px" >
<el-form-item label="用户名 :" >
<el-input v-model='username' type="text"/>
</el-form-item>
<el-form-item label="密码 :" >
<el-input v-model='password' type="password"/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">登录</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
</template>
<script>
import { reactive, toRefs } from 'vue'
export default {
name: 'Login',
setup () {
const data = reactive({
username: '',
password: ''
})
async function onSubmit () { //这行报错 Uncaught (in promise) TypeError: this is undefined, 格式错了吗?
await this.$http.post('login', { username: data.username, password: data.password }, { emulateJSON: true })
}
return { ...toRefs(data), onSubmit }
}
}
</script>
另外 element-plus 和 vue3.0 是不是兼容有问题? 有些莫名其妙的 BUG
哈喽,vue3中的this应该按这种写法获取
import { getCurrentInstance } from 'vue'
export default {
setup () {
const {proxy} = getCurrentInstance()
// proxy等同于vue2的this
return { }
}
}
所以代码可以改成如下:
import { reactive, toRefs, getCurrentInstance } from 'vue'
export default {
name: 'Login',
setup () {
const {proxy} = getCurrentInstance()
const data = reactive({
username: '',
password: ''
})
async function onSubmit () {
await proxy.$http.post('login', { username: data.username, password: data.password }, { emulateJSON: true })
}
return { ...toRefs(data), onSubmit }
}
}
不过,建议vue3直接用引入的方式去使用公共方法,不使用$挂全局方法
import { 函数 } from '模块地址'
有报错?可以贴一下,另外vue用使用变量需要在data中定义一下,请求方法及参数写在方法里!你这个下半部分都不符合规范,如有帮助请采纳哦!