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才可以访问页面。