接着上一篇,接下来要完成的是登陆注册页面,这两个页面在流程上很相近,这里主要以登陆页面来做说明.
1.创建相关文件夹及文件并进行配置
在src目录下创建一个view文件夹,之后所写的和页面相关的vue组件都放在此目录下,为了方便引用,要在webpack.base.config.js的resolve中进行配置.
这里为了便于维护,还可以在view下给每一个模块新建一个文件夹,因此这里我在view目录下还创建了一个auth文件夹,将用户登陆,注册相关的vue组件都放在view/auth中.
2.配置路由
在写具体的效果之前先进行路由配置,让我们可以在浏览器中访问到登陆页面.修改src/router/index.js文件:
引入Login组件由于之前我们已经配置了view文件夹的别名,因此这里的引用路径可以直接从view开始:
import Login from 'view/auth/Login'配置路由路径
在routes中添加一个对象,其中包含路由的路径,路由的名称,路由对应的组件:
export default new Router({ routes: [ { path: '/', name: 'Home', component: Home }, { path: '/login', name: 'Login', component: Login } ] })
这样在本地就可以通过https://localhost:8080/#/login来访问到登陆页面.
3.实现登陆表单
在写表单之前注意一点,vue2.0之后组件的template中只能有一个顶层结点,否则会报错,即
//正确//错误
element-ui提供了各种表单组件,具体的可以参考https://element.eleme.io/#/zh-CN/component/form,由于登陆都需要对用户输入进行验证,并且验证条件不同的系统也有所不同,因此这里选择了自定义校验规则这一类表单.
登陆
注意:为了更好的用户体验,一般会监听回车事件,使用户可以使用回车键提交表单,vue中提供了键值修饰符来监听键盘事件:
但在element-ui组件中,这样写是不能触发事件的,还需要加上.native修饰符,即
接下来定义相应的数据变量以及验证规则:
data() { var checkName = (rule, value, callback) => { if (value==='') { return callback(new Error('用户名不能为空')); }else{ callback(); } }; var validatePass = (rule, value, callback) => { if (value === '') { callback(new Error('请输入密码')); }else { callback(); } }; return { loginForm: { pass: '', name: '' }, loginFormRules: { pass: [ {validator: validatePass, trigger: 'blur'} ], name: [ {validator: checkName, trigger: 'blur'} ] } };
这里只验证了是否为空,还可以对长度和字符格式进行限制,这个根据需要可以自己限制,一般一个系统中会有多个地方都需要进行相同的验证,因此可以把验证方法写到外部的一个js文件中,然后在需要的地方进行引入,减少工作量以及重复代码.
最后来完成表单的提交方法,主要包括两个部分:
(1)只有表单验证都通过之后,表单才会被提交:
this.$refs.loginForm.validate((valid) => { if (valid) { //验证成功,进行表单提交 } else { //验证失败,不提交表单 console.log('error submit!!'); return false; } });
(2)调用后台提借的接口进行登陆验证:
之前我们已经引入了axios,这里使用axios的post方法进行接口调用.
this.$axios.post('/auth/login',this.loginForm).then(res => { //登陆成功,跳转到后台首页 }).catch(err => { //登陆失败,进行错误提示 });
这样就完成了登陆页面,注册页面主要是在表单和接口调用上有所不同,这里就不再详细说明.
交流QQ群:255489119