用element创建vue项目(2)登录功能完善

一、表单的数据绑定

1、为el-form加上:model="form"进行数据绑定。

2、为el-form里面的每一个文本输入框绑定到数据对象上具体的属性中。

<el-form :model="loginForm" label-width="0px" class="login_form">
<el-input v-model="loginForm.username" prefix-icon="iconfont icon-user"></el-input>
<el-input v-model="loginForm.password" prefix-icon="iconfont icon-3702mima"  type="password"></el-input>
<script>
export default {
    data(){
        return {
            //这是登录表单的数据绑定对象
            loginForm: {
                username: 'zs',
                password: '123'
            }
        }
    }
}
</script>

二、登录组件表单的数据验证

1、为el-form通过属性绑定指定一个rules。

<el-form :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">

2、在data中定义这个校验对象,每个属性都是一个验证规则。

//这是表单的验证规则对象
      loginFormRules: {
                //验证用户名是否合法
                username: [],
                //验证密码是否合法
                password: []
            }

对用户名的验证规则:

{ required: true, message: '请输入登录名称', trigger: 'blur' },
{ min: 3, max: 10, message: '长度在 3 到 5 个字符', trigger: 'blur' }

3、为不同的表单item项通过prop来指定不同的验证规则。

<!-- 用户名 -->
<el-form-item prop="username">
<!-- 密码 -->
<el-form-item prop="password">

二、登录组件实现表单的重置

拿到表单的实例对象然后调用resetFields就能实现,这个重置方法是el-form的方法。

那么如何拿到表单的实例对象呢?

<!-- 登录表单区域 -->
<el-form ref="loginFormRef">

只需要给el-form加一个ref的引用,那么只要获取到loginFormRef,就能拿到表单的实例对象。

可以直接通过loginFormRef来调用resetFields。

为重置按钮绑定一个单击事件

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

在js里

methods: {
    //点击重置按钮,重置登录表单
    resetLoginForm() {
        console.log(this)
    }
}

按下重置按钮,此时控制台能输出

resetLoginForm() {
            // console.log(this);
            this.$refs.loginFormRef.resetFields();
        }

 三、登陆组件登录前的预验证

给登录按钮加一个点击事件@click="login"

login() {
            this.$refs.loginFormRef.validate(valid => {
                console.log(valid);
            })
        }

四、根据预验证是否发起请求

全局导入axios,把axios这个包挂载到原型对象上

这样,每一个vue的组件都可以通过this直接访问到$http,从而发起axios请求。

import axios from 'axios'
//设置请求的根路径
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'
Vue.prototype.$http = axios
this.$refs.loginFormRef.validate(async valid => {
                // console.log(valid);
                if(!valid) return;
                const {data: res } = await this.$http.post("login", this.loginForm);
                //this.$http.post("login", this.loginForm)会输出一个Promise
                //可以在此之前加一个await来简化这个Promise
                //但是要注意await只能用在被async修饰的方法中
                console.log(res);
            })
if(res.meta.status !== 200) return console.log('登录失败');
    console.log('登录成功');

最后控制台效果:

五、登陆组件配置弹窗提示

用element ui 里面的message消息提示

首先在element.js里面导入Message组件,注意,这个组件和前几个导入的组件不一样,需要全局挂载到Vue上。这样每一个组件都可以通过this来访问到$message。

//导入弹窗提示组件
import { Message } from 'element-ui'
Vue.prototype.$message = Message

在Login.vue中修改输出

if(res.meta.status !== 200) return this.$message.error('登录失败!');;
this.$message.success('登录成功');

 六、登陆组件成功登录之后的行为

1.将登录成功之后的token,保存到客户端的sessionStorage中

1.1项目中除了登录之外的其他API接口,必须在登录之后才能访问

1.2token只应在当前网站打开生效,所以将token保存在session中

window.sessionStorage.setItem("token", res.data.token);

2.通过编程式导航跳转到后台主页,路由地址是/home

this.$router.push("/home");

components中新建一个Home.vue

<template>
    <div>
        home组件
    </div>
</template>

<script>
export default {}
</script>

<style lang="less" scoped>
</style>

添加相应的路由

import Home from '../components/Home.vue'
{ path: '/home', component:Home }

即可跳转到home页面。

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

Home是一个有权限的网页,只有在登录情况下才允许被访问。如果用户没有登录,但是直接通过URL访问特定页面,需要重新导航到登录页面。(注:这里只是一个逻辑,判断有无token即可)

//挂载路由导航守卫
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')
  next()
})

八、退出功能实现

简而言之就是要销毁掉本地保存的token。这样,后续的请求就不会携带token,必须重新登录生成一个新的token之后才可以访问页面。

Home.vue

<el-button type="info" @click="logout">退出</el-button>
export default {
    methods: {
        logout() {
            window.sessionStorage.clear()
            //重定向到登录页面
            this.$router.push('/login')
        }
    }
}

九、提交登录功能代码

查看状态

git status

git add .
git status
git commit -m "完成了登录功能"
git branch
git checkout master
git branch
git merge login

推送master分支到远程仓库

git push

再把login分支推送到远程仓库

git checkout login
git branch
git push -u origin login

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我来为你解答。 首先,你需要安装 VueElement UI,可以使用以下命令安装: ``` npm install vue npm install element-ui ``` 然后,在你的 Vue 项目中引入 Element UI,在 main.js 中添加以下代码: ``` import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 接下来,你就可以在你的 Vue 组件中使用 Element UI 组件了。 下面是一个使用 Element UI 写的登录页的例子: ``` <template> <div> <el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username" autofocus></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="form.password" type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm('form')">登录</el-button> </el-form-item> </el-form> </div> </template> <script> export default { data() { return { form: { username: '', password: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' } ] } } }, methods: { submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { // 发送登录请求 } else { console.log('error submit!!') return false } }) } } } </script> ``` 在这个例子中,我们使用了 Element UI 的 el-form、el-form-item、el-input 和 el-button 组件 ### 回答2: VueElement UI是非常流行的前端技术,可以帮助我们快速构建用户界面。下面是一个使用VueElement UI编写的登录页的示例: 1.首先,我们需要在HTML文件中引入VueElement UI的资源: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页</title> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> </head> <body> <div id="app"> <el-form ref="loginForm" :model="loginForm" label-width="80px"> <el-form-item label="用户名"> <el-input v-model="loginForm.username"></el-input> </el-form-item> <el-form-item label="密码"> <el-input v-model="loginForm.password" type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="login">登录</el-button> </el-form-item> </el-form> </div> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <script> new Vue({ el: '#app', data: { loginForm: { username: '', password: '' } }, methods: { login() { // 在这里写登录逻辑 } } }); </script> </body> </html> ``` 2.在上面的代码中,我们创建了一个Vue实例,并在`data`中定义了一个`loginForm`对象,用于保存用户输入的用户名和密码。我们使用`Element UI`的`el-form`和`el-form-item`组件来创建表单,并绑定`loginForm`对象的属性,实现了登录表单的双向数据绑定。 3.在点击“登录”按钮时,我们可以在`methods`中定义一个`login`方法,用来处理登录逻辑。在实际项目中,我们可以发送登录请求,验证用户输入的用户名和密码是否正确,然后进行相应的登录操作。 以上是使用VueElement UI编写的一个简单的登录页示例。你还可以根据需求添加更多的表单验证、样式和交互逻辑来完善登录页。 ### 回答3: 使用VueElement UI编写登录页面相对简单。首先,需要安装VueElement UI的依赖包。可以在Terminal或者命令行中执行如下命令: ``` npm install vue npm install element-ui ``` 接下来,创建一个Vue组件,命名为Login.vue。在Login.vue中,导入VueElement UI的相关模块。然后,创建一个登录页面的模板,包含用户名和密码的输入框以及登录按钮。使用Element UI的组件来实现这些元素。最后,添加一个登录方法,用于处理用户的登录逻辑。 下面是一个简单的示例代码: ```html <template> <div class="login-container"> <el-form ref="loginForm" :model="loginForm" :rules="rules" class="login-form"> <el-form-item prop="username"> <el-input v-model="loginForm.username" placeholder="用户名"></el-input> </el-form-item> <el-form-item prop="password"> <el-input type="password" v-model="loginForm.password" placeholder="密码"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="login">登录</el-button> </el-form-item> </el-form> </div> </template> <script> import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) export default { data() { return { loginForm: { username: '', password: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' } ] } } }, methods: { login() { // 处理登录逻辑,例如发送登录请求到服务器端 // 使用this.$http.post或其他方式发送请求 // 根据返回结果进行跳转或显示错误提示 console.log('登录') } } } </script> <style scoped> .login-container { display: flex; justify-content: center; align-items: center; height: 100vh; } .login-form { width: 300px; } </style> ``` 以上是一个基本的登录页面的示例。在实际使用中,可以根据需求进行适当的修改和扩展。例如,可以添加更多的表单校验规则、验证码功能等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值