element ui项目笔记

表单校验

最外层表单区绑定规则::rules="loginFormRules"

每一个表单项的el-form-item中加prop="username"

        <!--登录表单区-->
        <el-form label-width="80px" :model="loginForm" class="login_form" :rules="loginFormRules">
          <!-- 用户名-->
          <el-form-item label="用户名" prop="username">
            <el-input  prefix-icon="iconfont icon-user" v-model="loginForm.username" ></el-input>
          </el-form-item>

data中定义规则

  data () {
    return {
      // 这个登录表单的数据绑定对象
      loginForm: {
        username: '',
      },
      // 这是表单的验证规则对象
      loginFormRules: {
        // 验证用户名是否合法
        username: [
          { required: true, message: '请输入登录名称', trigger: 'blur' }, // 失去焦点时触发
          { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
        ],
      }
    }
  }

表单的重置

获取表单区的实例对象:ref="loginFormRef"

        <!--登录表单区-->
        <el-form ref="loginFormRef" label-width="80px" :model="loginForm" class="login_form" :rules="loginFormRules">

绑定点击事件:@click="resetLoginForm"

<el-button type="info" @click="resetLoginForm">重置</el-button>

方法

  methods: {
    // 点击重置按钮,清空登录表单
    resetLoginForm () {
      // console.log(this);
      this.$refs.loginFormRef.resetFields()
    }
  }

登录前的预校验

绑定事件:@click="login"

<el-button type="primary" @click="login">登录</el-button>

方法:回调函数返回值,true false

    login () {
      // 表单登录之前预验证
      this.$refs.loginFormRef.validate((valid) => {
        console.log(valid)
      })
    }

请求axios

import axios from 'axios'
// 设置请求的根路径
// axios.defaults.baseURL=""
Vue.prototype.$http=axios

登录请求

    login () {
      // 表单登录之前预验证
      this.$refs.loginFormRef.validate(async (valid) => {
        // 验证失败
        if (!valid) {
          this.$message.error("请求失败")
          return
        }
        const { data:res } =await this.$http.post("login",this.loginForm)
        if(res.meta.status !==200) return this.$message.error("登录失败");
        this.$message.success("登录成功")


      })
    }

配置弹出窗的效果

挂载

调用

token保存到sessionStotage

        // 1. 将登录成功之后的 token,保存到客户端的 sessionStorage 中
        //   1.1 项目中出了登录之外的其他API接口,必须在登录之后才能访问
        //   1.2 token 只应在当前网站打开期间生效,所以将 token 保存在 sessionStorage 中
        window.sessionStorage.setItem('token', res.data.token)
        // 2. 通过编程式导航跳转到后台主页,路由地址是 /home
        this.$router.push('/home')

路由导航守卫控制访问权限

// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
  // to 将要访问的路径
  // from 代表从哪个路径跳转而来
  // next 是一个函数,表示放行
  //     next()  放行    next('/login')  强制跳转

  if (to.path === '/login') return next()
  // 获取token
  const tokenStr = window.sessionStorage.getItem('token')
  if (!tokenStr) return next('/login')
    // 提交token给服务器,判断token是否有效,有效再。。
  next()
})

export default router

退出功能的实现原理

销毁本地的token。这样后续的请求就不能通过路由导航守卫,必须重新登录生成一个新的token才可以访问页面。

posted @ 2021-11-08 15:01  成强  阅读(40)  评论(0编辑  收藏  举报