用户页面
用户页面基础代码展示,user.vue
|
|
代码分析:
接下来依次分析user.vue的代码。
路径展示区
在用户页面里首先需要展示当前页面的路径,可以快速返回之前的页面。
编写基础组件breadcr.vue
这里用到element-ui的Breadcrumb 面包屑。考虑到在其他页面也要用到次此组件,所以我把Breadcrumb组件抽取出来做基础组件,方便其他页面使用。
组件路径在/base/breadcr/breadcr.vue
|
|
在Vue里父组件向子组件中传送数据是通过props实现的。所以我在props里定义属性meName
,默认为空,表示菜单名称。
|
|
在user.vue组件里注册breadcr组件,并使用它。
|
|
我们可以用 v-bind
来动态地将 props 绑定到父组件的数据。每当父组件的数据变化时,该变化也会传导给子组件。v-bind
的缩写语法是:
在data里声明meName
并赋值
|
|
页面展示如下(红框部分):
搜索区
搜索区使用element-ui的Form表单实现,这里使用行内表单,可以把几个表单放置在一行内,以此来实现我想要的效果。
|
|
:inline
设置为true
可以让表单域变为行内的表单域,:model
表示绑定要输入的搜索数据,所以要在data里搜索数据对象
|
|
页面效果如下(红框部分):
用户表格区
使用element-ui的Table表格展示用户数据。data
表示要显示的数据。
|
|
highlight-current-row
表示高亮当前行,同时当表格的当前行发生变化的时候会触发@current-change
事件,在data里定义currentRow
|
|
跨域请求数据
使用axios跨域请求数据
不同域名之间的访问,需要跨域才能正确请求。我们的项目是前后端分离,存在跨域问题。Vue-cli 创建的项目,可以直接利用 Node.js 代理服务器,实现跨域请求,我使用axios解决跨域。
axios简介
vue2.0官方推荐axios进行ajax请求。axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:
- 从浏览器中创建 XMLHttpRequest
- 从 node.js 发出 http 请求
- 支持 Promise API
- 拦截请求和响应
- 转换请求和响应数据
- 取消请求
- 自动转换JSON数据
- 客户端支持防止 CSRF/XSRF
废话不多说,直接开始使用
安装axios
|
|
封装axios方法
一般情况下,我们会用到的方法有:GET,POST,PUT,PATCH,DELETE,封装方法如下:
|
|
设置代理
在config/index.js文件中修改dev中的proxyTable
|
|
其中 ‘/api’ 为匹配项,target 为被请求的地址,因为在 ajax 的 url 中加了前缀 ‘/api’,而原本的接口是没有这个前缀的,所以需要通过 pathRewrite 来重写地址,将前缀 ‘/api’ 转为 ‘/‘,如果本身的接口地址就有 ‘/api’ 这种通用前缀,就可以把 pathRewrite 删掉。
获取用户列表
这里我把用户相关的操作代码放在api文件下,使用时方便查找一目了然。
api/user.js
|
|
现在引入封装好的axios文件,执行GET请求,给出url和所需参数,url是接口地址。这里url='/user'
而不是url='/api/user'
,是因为我在index.js文件里设置axios.defaults.baseURL = '/api'
,使用 axios可以全局配置一个 baseURL
,所以无需再加上/api
。
user.vue
|
|
引入api/user.js文件,调用getUser()
方法,判断response的状态码,如果正确,控制台输出用户列表,截图如下:
想要在页面展示数据,首先在data中定义users
对象,默认为[]
,同时设置:data="users"
,在table表格内填充数据。
|
|
截图如下:
用户数据成功展示,完美~!
搜索
前面已经创建搜索数据对象,接下来对搜索按钮进行操作,点击搜索按钮触发search事件。
|
|
在api/user.js里创建searchUser()
,调用GET方法
api/user.js
|
|
同样user.vue引入searchUser()
方法。这里需要注意下,因为后台给出的数据与所得出的数据不同,需要先对数据处理得出我们想要的数据结构。数据处理方法可能会在其他组件中用到,所以我把它放在common包下,代码如下:
common/js/utils.js
|
|
user.vue
|
|
截图效果如下:
添加用户
对添加用户按钮进行操作,点击添加用户按钮触发showAndUser
事件。
|
|
添加用户页面我使用element-ui里的Dialog 对话框来实现,点击按钮弹出添加用户页面。
|
|
:visible.sync="dialogFormVisible"
表示是否显示 Dialog,同时在data里定义dialogFormVisible
,默认为false
,表示是否显示添加页面。定义addForm
对象表示添加数据。
|
|
调用POST请求
api/user.js
|
|
user.vue
|
|
页面展示: