基本布局已经有了, 如今咱们来开始作咱们的注册页面~
固然须要注册才能发表文章啊(糟老头子坏得很, 我能够只有我一我的能发啊)。javascript
这里咱们设定只有注册才能发表文章,也就淡化了管理员这个概念。在开发中先将原型作出来,而后再对其进行迭代、重构来达到咱们最终想要的效果。html
新建 vue
组件,编写注册页面的代码vue
为这个组件创建路由对象java
这里咱们依旧是采用 ElementUI
中的组件,由于是注册,须要提交表单。webpack
所以咱们来看看 ElementUI
中表单组件相关的文档:ios
官方文档:点击查看web
首先先在 views
目录下新建 Signup.vue
组件。vue-router
而后编写视图代码:axios
<template> <div> <el-form> <el-form-item prop="username" label="用户名"> <el-input></el-input> </el-form-item> <el-form-item prop="password" label="密码"> <el-input type="password"></el-input> </el-form-item> <el-form-item prop="rePassword" label="确认密码"> <el-input type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" size="small">注册</el-button> </el-form-item> </el-form> </div> </template> <script> export default { name: "Signup" } </script> <style scoped> </style>
这里只是实现了页面, 尚未实现其余的逻辑。后端
其实路由对象应该和组件创建一块儿,当你的组件新建以后,就应该去为它建一个路由对象。
这样你可以边写代码,边看实际效果。
import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'home', component: Home }, { path: '/about', name: 'about', component: () => import(/* webpackChunkName: "about" */ './views/About.vue') }, { path: '/signup', name: 'signup', component: () => import('./views/Signup.vue') } ] })
好了, 如今咱们能够来看看效果:
这个效果有点感人啊,整个元素所有铺开在页面上,彻底没有用户体验了。
不行, 咱们得改改,虽然说不是专业的设计师。可是基本的设计仍是要有的
这里咱们依旧在 ElementUI
中查找看是否有现成的解决方案:
布局文档:点击查看
很好, 这里咱们能够利用 el-row
, el-col
来进行布局。
它是基于24分栏的栅栏布局,咱们想要让这个表单居中应该怎么办呢?
要居中的话, 左右两边的栅栏数相等便可,也就实现了表单这个块元素是位于水平居中的。
代码:
<template> <div> <el-row> <el-col :span="6" :offset="9"> <el-form label-width="80px"> <el-form-item prop="username" label="用户名"> <el-input></el-input> </el-form-item> <el-form-item prop="password" label="密码"> <el-input type="password"></el-input> </el-form-item> <el-form-item prop="rePassword" label="确认密码"> <el-input type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" size="small">注册</el-button> </el-form-item> </el-form> </el-col> </el-row> </div> </template> <script> export default { name: "Singup" } </script> <style scoped> </style>
上面代码中的 6
和 9
都是计算得来的,总共是24
,左右两边又要相等,那么中间的表单占用了 6
格,还剩下18
格。平分下来每边就是9
格了。
如今效果就好不少了:
页面已经完成, 剩下的就是编写注册逻辑:
点击注册,首先验证密码和确认密码是否一致
密码一致则向后端接口发起请求
这里的接口咱们使用 postman
模拟出来的接口。
在这以前咱们先把数据定义一下, 而且绑定到表单元素中去:
data() { return { model: { username: '', password: '', rePassword: '' } }; },
<template> <div> <el-row> <el-col :span="6" :offset="9"> <el-form label-width="80px"> <el-form-item prop="username" label="用户名"> <el-input v-model="model.username"></el-input> </el-form-item> <el-form-item prop="password" label="密码"> <el-input type="password" v-model="model.password"></el-input> </el-form-item> <el-form-item prop="rePassword" label="确认密码"> <el-input type="password" v-model="model.rePassword"></el-input> </el-form-item> <el-form-item> <el-button type="primary" size="small">注册</el-button> </el-form-item> </el-form> </el-col> </el-row> </div> </template>
首先给注册按钮添加对应事件:
<el-button type="primary" size="small" @click="submit">注册</el-button>
而后在 methods
中实现此函数:
submit() { if(this.model.password !== this.model.rePassword){ this.$message.error('两次出入密码不一致.'); return ; } axios.post('https://451ece6c-f618-436b-b4a2-517c6b2da400.mock.pstmn.io/signup', this.model) .then(res => { if(res.data.Code === 200){ this.$message.success("注册成功"); } }); }
实际效果:
这段逻辑中使用了 axios
库用来向后端接口发起异步请求,具体的使用方式能够查阅官方文档:
到底为止,注册功能算是完成了80%
了,剩下的等把登陆页面写完以后,再加上: