满口金牙 2021-10-17 16:17 采纳率: 91.5%
浏览 66
已结题

Vue3.0 POST 传参错误, 请指点!


<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

  • 写回答

2条回答 默认 最新

  • been_ss 2021-10-18 11:08
    关注

    哈喽,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 '模块地址'
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 已采纳回答 10月18日
  • 创建了问题 10月17日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)