Vue3+Element-Plus 登录功能向服务器起发后台数据请求实现十四

1.根据验证结果,向服务器发起数据请求

1.1 根据预验证结果进行判断,如果结果为false,不发起请求。

  • 如果向服务器发起请求,就需要用到一个包,这个包叫 Axios ;

1.2 配置Axios包 

  • 打开程序入口文件 main.js ,对Axios这个包进行全局配置

  • 引入Axios
  • 把这个包挂载在Vue 原型对象上
  • 挂载的意思是,每一个组件,都可以通过this访问到 $http,从而发起ajax请求。

  •  设置接口请求根路径,根据提供的接口文档进行设置。如图接口文档根路径 

 代码配置如图,axios会提供一个defaults.baseURL进行根路径配置

 踏坑小助手:

  1. vue 2.0 中是直接使用Vue.prototype.$http=axios

  1. vue 3.0 中使用了app.config.globalProperties.$axios = axios 进行替换了prototype

 1.3 组件通过this访问挂载在vue上面的$http,通过$http发起登录请求

  1. 请求地址和方法,参考文档

   

2. 由于用户填写的表单数据,都会保存在表单数据form对象里面。所以请求方法后面,直接填表单数据对象。

  3. 开启服务器,保证服务器运行中。参考(17条消息) Vue+Element-UI 前后端分离开发四(项目初始化)_码侬人生-CSDN博客

 1.4 使用const 进行接收请求返回的数据

  •  先输出在控制台,打印看看结果

  •  可以看到返回的结果是Promise。

  1.  什么是Promise,看百度结果

Promise 是异步编程的一种解决方案: 从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。 promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。 

    2. 如何解决某个方法返回 Promise的结果。如上理解了,就是它需要使用异步进行访问。

  • 使用await async
  • await只能使用在async修饰的方法中

    3. 接下来,再次发起请求,使用console.log查看一下result对象,看看还是不是promise对象。

如图,已经不再是promise对象了,而是一个具体响应对象

   4. 该响应对象,包括了6个对象属性,config、data、headers、status、statusText。这6个属性都是Axios自动帮我们封装好的。其中 data 才是服务器返回的真实数据。换名话说,除了data属性,其他属性根本不需要。

   5. 由于data属性是一个json对象,我们需要进行解构赋值出来。可以直接使用接收的对象result 进行解构赋值。

 1.4 如何解构赋值

  1.  通过花括号进行解构赋值

     2. 查看控制台,已经解构成功。

  3. 进行meta 响应对象里面的状态码判断

  •  如果状态码等于200,证明登录成功。不等于200,登录失败。

 4. 如图,填入正确的用户,就会显示登录成功了

 1.5 代码

 main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import installElementPlus from './plugins/element'
// 导入字体图标
import './assets/font/iconfont.css'
// 导入全局样式表
import './assets/css/global.css'

import axios from 'axios'
// 配置请求根路径
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'
const app = createApp(App)
installElementPlus(app)
app.config.globalProperties.$http = axios
app.use(router).mount('#app')

 Login.vue

<template>
  <div class="login_container">
    <div class="login_box">
      <!-- 头像区域 -->
      <div class="avatar_box">
        <img src="../assets/logo.png" alt="" />
      </div>
      <!-- 登录表单区域 -->
      <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
        <!-- 用户名 -->
        <el-form-item prop="username">
          <el-input
            v-model="loginForm.username"
            prefix-icon="iconfont icon-yonghu"
          >
          </el-input>
        </el-form-item>
        <!-- 密码 -->
        <el-form-item prop="password">
          <el-input
            v-model="loginForm.password" type="password"
            prefix-icon="iconfont icon-mima"
          >
          </el-input>
        </el-form-item>
        <!-- 按钮区域 -->
        <el-row justify="end">
          <el-form-item class="login_btn">
            <el-button type="primary" @click="Login">登录</el-button>
            <el-button type="info" @click="resetLoginForm">重置</el-button>
          </el-form-item>
        </el-row>
      </el-form>
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      // 这是登录表单的数据绑定对象
      loginForm: {
        username: '',
        password: ''
      },
      // 这是表单的验证规则对象
      loginFormRules: {
        // 验证用户名是否合法
        username: [
          { required: true, message: '请输入登录名称', trigger: 'blur' },
          { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
        ],
        // 验证密码是否合法
        password: [
          { required: true, message: '请输入登录密码', trigger: 'blur' },
          { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    resetLoginForm () {
      this.$refs.loginFormRef.resetFields()
    },
    Login () {
      this.$refs.loginFormRef.validate(async valid => {
        if (!valid) return
        const { data: result } = await this.$http.post('login', this.loginForm)
        if (result.meta.status !== 200) return console.log('登录失败')
        console.log('登录成功')
      })
    }
  }
}

</script>

<style lang="less" scoped>
.login_container {
  background-color: #2b4b6b;
  height: 100vh;
}
.login_box {
  // 宽450像素
  width: 450px;
  // 高300像素
  height: 300px;
  // 背景颜色
  background-color: #fff;
  // 圆角边框3像素
  border-radius: 3px;
  // 绝对定位
  position: absolute;
  // 距离左则50%
  left: 50%;
  // 上面距离50%
  top: 50%;
  // 进行位移,并且在横轴上位移-50%,纵轴也位移-50%
  transform: translate(-50%, -50%);
  .avatar_box {
    // 盒子高度130像素
    height: 130px;
    // 宽度130像素
    width: 130px;
    // 边框线1像素 实线
    border: 1px solid #eee;
    // 圆角
    border-radius: 50%;
    // 内padding
    padding: 10px;
    // 添加阴影 向外扩散10像素 颜色ddd
    box-shadow: 0 0 10px #ddd;
    // 绝对定位
    position: absolute;
    // 距离左则
    left: 50%;
    // 位移
    transform: translate(-50%, -50%);
    // 背景
    background-color: #fff;
    img {
      width: 100%;
      height: 100%;
      border-radius: 50%;
      background-color: #eee;
    }
  }
}
.login_form {
  position: absolute;
  bottom: 0;
  width: 100%;
  padding: 0 20px;
  box-sizing: border-box;
}
.login_btn {
  // 设置弹性布局
  display: flex;
  // 横轴上尾部对齐
  justify-content: flex-end;
}
</style>

 以上出自于:【黑马程序员】前端开发之Vue项目实战_Element-UI【配套源码+笔记】_哔哩哔哩_bilibiliicon-default.png?t=LA92https://www.bilibili.com/video/BV1x64y1S7S7?p=1

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
很抱歉,我无法提供免费源码。但是,我可以向您提供一些指导,以帮助您开始开发一个基于Vue2、Element Plus、Spring Boot、MyBatis和MySQL的商城。 首先,您可以按照以下步骤进行开发: 1. 设置环境:确保您的开发环境中已经安装了Node.js、Vue CLI和Java开发环境。 2. 创建Vue项目:使用Vue CLI创建一个新的Vue项目,可以选择Vue2版本。 3. 集成Element Plus:按照Element Plus的文档,将它集成到您的Vue项目中。Element Plus是一套基于Element UI的扩展组件库,用于构建后台管理系统。 4. 设计页面:根据您的商城需求,设计和创建各个页面,包括首页、商品列表、商品详情、购物车、订单等。 5. 定义API:根据您的后端需求,设计并定义与后端交互的API接口。可以使用Spring Boot创建后端应用程序,并使用MyBatis进行数据库访问。 6. 实现前后端交互:在前端项目中,使用Axios或Fetch等工具发送HTTP请求,与后端API进行交互并获取数据。 7. 数据库设计:根据商城需求,设计数据库表结构,并使用MySQL进行建表和数据存储。 8. 实现业务逻辑:根据商城需求,实现各种业务逻辑,例如用户注册、登录、商品展示、购物车管理、订单生成等。 9. 测试和调试:在开发过程中,进行适当的测试和调试,确保功能的正常运行。 10. 部署和上线:完成开发后,可以将前端和后端分别部署到合适的服务器上,并进行线上测试和上线。 这些是一个基本的开发流程,您可以根据具体需求进行调整和扩展。希望这些指导对您有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丫头呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值