前言

我们将会选择使用一些 vue 周边的库vue-cli, vue-router,axios,moment,Element-ui搭建一个前端项目案例,后端数据接口,会使用json-server快速搭建一个本地的服务,方便对数据的增删改查,

利用以上技术我们会搭建一个vue案例,效果展示图:

以上就是我们最终要实现的全部效果,我会一块一块的讲解,关于脚手架安装和json-server搭建,在本次博客中,不会讲解,如果想看的话,在小编的博客中,也有讲解关于脚手架搭建和json-server搭建,如果想学习的话,可以看一下。

1.项目结构展示

左边第一个是前端项目结构,第二个为json-server服务端

2.页面搭建

在本次案例中,小编采用Element-ui快速搭建前端页面,以提高效率。如果不了解的话,可以去官网看一下

2.1安装element-ui

通过npm install element-ui -S 安装前端ul框架,安装完之后,并在main.js引入

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)

2.2页面布局UserInfo.vue

直接通过element-ui中table布局,把整体建构页面布局完成,

用户信息管理界面

添加

:data="searchUserinfo(keyUser)"

border

style="width: 100%">

type="index"

label="序号"

align="center"

width="60">

label="日期"

align="center"

width="120">

{{ scope.row.date | moment}}

label="姓名"

align="center"

width="100">

{{ scope.row.name }}

label="邮箱"

align="center"

width="160">

{{ scope.row.email }}

label="标题"

align="center"

width="160">

{{ scope.row.title }}

label="评价"

align="center"

width="200">

{{ scope.row.evaluate }}

label="状态"

align="center"

width="160">

{{ scope.row.state }}

size="mini"

@click="handleEdit(scope.$index, scope.row)">编辑

size="mini"

type="danger"

@click="handleDelete(scope.$index, scope.row)">删除

2.3页面数据获取并展示

通过axios请求本地搭建的服务数据,把得到的数据展示到页面当中。

也是通过cnpm install axios --save安装并在main.js中引入

import axios from 'axios'

Vue.prototype.$axios = axios

我们需要在方法methods中定义一个getUserInfo方法,用于请求数据

data () {

return {

tableData: [], 用于存放数据

}

}

getUserInfo() {

this.$axios.get('http://localhost:3000/data').then(res => {

this.tableData = res.data

})

},

这是时候,数据是请求到了,但是页面并为展示,这就关系到vue的生命周期。如果对vue生命周期不是很了解的话,可以官网仔细看一遍,

我们只需要在created这个生命周期钩子中,调用我们请求数据的方法就可以把数据展示到页面中。这样我们就完成第一步了,页面数据请求展示created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。

3.添加数据

刚才我们已经完成第一步,把后台的数据展示到前端页面中,接下来我们对数据进行添加,页面全部都是用element搭建

3.1页面结构搭建,把AddUserInfo.vue组件当成一个子组件,在父组件中引入这个子组件,点击添加按钮,弹出这个添加对话框

v-model="formDate.date"

type="date"

placeholder="选择日期">

取 消

确 定

3.2我们在父组件UserInfo中引入子组件AddUserInfo.vue,

//使用这个组件,

import AddUser from './AddUserInfo.vue' //引入组件

components:{ //注册

AddUser,

}

3.3通过点击父组件的添加按钮触发子组件弹出框

dialogAdd是我们在父组件定义的的,需要传递给子组件,

添加

在data定义用于是否弹出添加弹出框,默认false不弹出,只有点击添加按钮的时候才弹出弹出框

dialogAdd:{

show:false

},

methods方法中

hanldeAdd(){ //添加

this.dialogAdd.show = true; //弹出对话框

},

3.4子组件需要接受父组件传递的方法.并请求数据。实现添加

export default {

name: 'AddUser',

props:{

dialogAdd:Object

},

data () {

return {

formDate:{

date:'',

name:'',

email:'',

title:'',

evaluate:'',

state:''

},

formrules:{

date:[{required:true,message:"日期不能为空",trigger:"blur"}],

name:[{required:true,message:"用户名不能为空",trigger:"blur"}],

email:[{required:true,message:"邮箱不能为空",trigger:"blur"}],

}

}

},

methods:{

dialogFormAdd(formdong) {

this.$refs[formdong].validate((valid) => {

if (valid) {

this.$axios.post('http://localhost:3000/data',this.formDate).then(res => {

this.$message({

type:"success",

message:"添加信息成功"

})

this.dialogAdd.show = false;

this.$emit('update');

})

this.formDate = ""

} else {

console.log('error submit!!');

return false;

}

})

}

}

}

this.$emit('update'); 子组件数据发生改变了,父组件视图却没有更新,这时候通过子创父,this.$emit,想父组件发送子组件传递的方法,

@update="getUserInfo" //接受子组件传递过来的方法去更新视图

4.实现删除

size="mini"

type="danger"

@click="handleDelete(scope.$index, scope.row)">删除

删除数据需要根据id去删除,使用es6模板字符串进行拼接

handleDelete(index,row) {

// 删除用户信息

this.$axios.delete(`http://localhost:3000/data/${row.id}`).then(res =>{

this.$message({

type:"success",

message:"删除信息成功"

})

this.getUserInfo() //删除数据,更新视图

})

},

5.实现编辑功能

在这里添加弹出框内容和编辑弹出框内容一模一样,可以选择进行封装,封装成一个组件,添加和编辑共同使用这一个组件,根据自定义一个字段来判断点击 的是添加还是编辑按钮。在本次案例中,没有封装,如果想封装的话,可以自己尝试封装组件,来提高效率。

5.1页面搭建EditUser.vue组件,也是当做一个子组件,在父组件中去引入这个子组件,并把获取的数据展示到页面中。

v-model="form.date"

type="date"

placeholder="选择日期">

取 消

确 定

在父组件中定义好需要传递的数据字段

dialogAdd:{ //编辑弹出框,默认是false

show:false

},

form:{ //编辑信息

date:'',

name:'',

email:'',

title:'',

evaluate:'',

state:''

},

5.2也是在方法中点击编辑按钮,在编辑中,点击拿一行,需要获取那一行的字段数据,并把获取的数据传递给子组件显示到弹出框中,需要肯据row,来获取每一行的数据。

size="mini"

@click="handleEdit(scope.$index, scope.row)">编辑

handleEdit(index,row){ //编辑

this.dialogEdit.show = true; //显示弹

this.form = {

date:row.date,

name:row.name,

email:row.email,

title:row.title,

evaluate:row.evaluate,

state:row.state,

id:row.id

}

},

当我门打印row的是,就是点击哪一行的编辑按钮,对应的数据就好打印出来,这时候我们只需要把得到的数据传递给子组件就行

5.3父组件得到的数据,子组件通过props接受,和添加数据几乎一样

export default {

name: 'HelloWorld',

props:{

dialogEdit:Object,

form:Object

},

data () {

return {

formrules:{

date:[{required:true,message:"日期不能为空",trigger:"blur"}],

name:[{required:true,message:"用户名不能为空",trigger:"blur"}],

email:[{required:true,message:"邮箱不能为空",trigger:"blur"}],

}

}

},

methods:{

dialogFormEdit(formEdit) {

this.$refs[formEdit].validate((valid) => {

if (valid) {

this.$axios.put(`http://localhost:3000/data/${this.form.id}`,this.form).then(res => {

this.$message({

type:"success",

message:"编辑信息成功"

})

console.log(res)

this.dialogEdit.show = false;

this.$emit('updateEdit') //更新父组件数据视图

})

} else {

console.log('error submit!!');

return false;

}

})

}

}

}

6查询数据

6.1需要定义一个查询方法,通过filter对数组进行过滤,并返回一个新的数据,最后通过es6中includes方法,判断查询的条件是否包含,includes如果包含就返回true,如果不包含就返回false

searchUserinfo(keyUser) {

return this.tableData.filter((user) => {

if(user.name.includes(keyUser)) {

return user

}

})

}

把定义好的方法,绑定到data,因为这个方法会返回一个新的数组

7.时间格式化

写到这个案例已经基本写完了,还是一些细节需要修改,比如我我们添加日期,页面显示并不是我们想要的。我门只想要右边的效果.

这时候推荐一个日期格式化插件moment.js,可以快速帮我们解决这个问题

7.1通过npm install moment --save下载

在main.js引入

import moment from 'moment'

我们定义一个全局过滤的filter,无论在那个组件都可以使用,主要调用moment

//获取年份

Vue.filter('moment', function (value, formatString) {

formatString = formatString || 'YYYY-MM-DD HH:mm:ss';

return moment(value).format("YYYY-MM-DD"); // value可以是普通日期 20170723

});

8.全部代码

8.1UserInfo.vue组件代码

用户信息管理界面

添加

:data="searchUserinfo(keyUser)"

border

style="width: 100%">

type="index"

label="序号"

align="center"

width="60">

label="日期"

align="center"

width="120">

{{ scope.row.date | moment}}

label="姓名"

align="center"

width="100">

{{ scope.row.name }}

label="邮箱"

align="center"

width="160">

{{ scope.row.email }}

label="标题"

align="center"

width="160">

{{ scope.row.title }}

label="评价"

align="center"

width="200">

{{ scope.row.evaluate }}

label="状态"

align="center"

width="160">

{{ scope.row.state }}

size="mini"

@click="handleEdit(scope.$index, scope.row)">编辑

size="mini"

type="danger"

@click="handleDelete(scope.$index, scope.row)">删除

import AddUser from './AddUser.vue'

import EditUser from './EditUser.vue'

export default {

name: 'info',

data () {

return {

tableData:[],

dialogEdit:{

show:false,

},

dialogAdd:{

show:false

},

keyUser:"",

form:{ //编辑信息

date:'',

name:'',

email:'',

title:'',

evaluate:'',

state:''

},

}

},

methods:{

getUserInfo() {

this.$axios.get('http://localhost:3000/data').then(res => {

console.log(res)

this.tableData = res.data

})

},

hanldeAdd(){ //添加

this.dialogAdd.show = true;

},

handleEdit(index,row){ //编辑

this.dialogEdit.show = true; //显示弹

this.form = {

date:row.date,

name:row.name,

email:row.email,

title:row.title,

evaluate:row.evaluate,

state:row.state,

id:row.id

}

console.log(row)

},

handleDelete(index,row) {

// 删除用户信息

this.$axios.delete(`http://localhost:3000/data/${row.id}`).then(res =>{

this.$message({

type:"success",

message:"删除信息成功"

})

this.getUserInfo() //删除数据,更新视图

})

},

searchUserinfo(keyUser) {

return this.tableData.filter((user) => {

if(user.name.includes(keyUser)) {

return user

}

})

}

},

created(){

this.getUserInfo()

},

components:{

AddUser,

EditUser

}

}

h1{

font-size: 30px;

color: #333;

text-align: center;

margin: 0 auto;

padding-bottom: 5px;

border-bottom: 2px solid #409EFF;

width: 300px

}

8.2AddUserInfo.vue组件

v-model="formDate.date"

type="date"

placeholder="选择日期">

取 消

确 定

export default {

name: 'AddUser',

props:{

dialogAdd:Object

},

data () {

return {

formDate:{

date:'',

name:'',

email:'',

title:'',

evaluate:'',

state:''

},

formrules:{

date:[{required:true,message:"日期不能为空",trigger:"blur"}],

name:[{required:true,message:"用户名不能为空",trigger:"blur"}],

email:[{required:true,message:"邮箱不能为空",trigger:"blur"}],

}

}

},

methods:{

dialogFormAdd(formdong) {

this.$refs[formdong].validate((valid) => {

if (valid) {

this.$axios.post('http://localhost:3000/data',this.formDate).then(res => {

this.$message({

type:"success",

message:"添加信息成功"

})

this.dialogAdd.show = false;

this.$emit('update');

})

this.formDate = ""

} else {

console.log('error submit!!');

return false;

}

})

}

}

}

8.3EditUser.vue编辑组件

v-model="form.date"

type="date"

placeholder="选择日期">

取 消

确 定

export default {

name: 'HelloWorld',

props:{

dialogEdit:Object,

form:Object

},

data () {

return {

formrules:{

date:[{required:true,message:"日期不能为空",trigger:"blur"}],

name:[{required:true,message:"用户名不能为空",trigger:"blur"}],

email:[{required:true,message:"邮箱不能为空",trigger:"blur"}],

}

}

},

methods:{

dialogFormEdit(formEdit) {

this.$refs[formEdit].validate((valid) => {

if (valid) {

this.$axios.put(`http://localhost:3000/data/${this.form.id}`,this.form).then(res => {

this.$message({

type:"success",

message:"编辑信息成功"

})

console.log(res)

this.dialogEdit.show = false;

this.$emit('updateEdit')

})

} else {

console.log('error submit!!');

return false;

}

})

}

}

}

以上这次全部的案例deom,在过程中有些说的不是很好,请见谅,如果喜欢,请多多关注

html整合vue elementui,vue2.0结合Element-ui实战案例相关推荐

  1. vue2.0的Element UI的表格table列时间戳格式化

    表格属性 [html] view plain copy <el-table :data="tableData" v-loading.body="loading&qu ...

  2. vue2.0基于element ui 上月 本月 下月

    <div style="margin-bottom:15px ;float:right;"><el-button-group><el-button p ...

  3. vue3.0 结合element ui 开发后台ui框架

    vue3.0 结合element ui 开发后台ui框架,根据element ui 官网步骤安装出现报错信息,解决方法: 按照element UI官网步骤, 启动vue 3.0项目:npm run s ...

  4. vue表格显示图片,采用element ui实现

    项目场景: vue表格显示图片,采用element ui实现 <template><el-table :data="tableData" style=" ...

  5. vue 专题 vue2.0各大前端移动端ui框架组件展示

    Vue 专题 一个数据驱动的组件,为现代化的 Web 界面而生.具有可扩展的数据绑定机制,原生对象即模型,简洁明了的 API 组件化 UI 构建 多个轻量库搭配使用 请访问链接: https://ww ...

  6. vue视频教程,vue2.0

    vue视频教程很多人对我说vue教程,这里我给大家推荐vue2.0视频教程下载,这是一套从基础到项目一共8天的就业视频从0基础到商城实战有基础可以跳过直接项目 可以关注微信公众号搜索:cityapes ...

  7. vue 3.0记录Element UI 表单使用(看了隔壁小孩儿都会用的Element UI 表单组件使用)

    Element UI 表单 使用 记录 element ui 表单 input 文本域 日期选择 中国标准时间与xxxx-xx-xx格式时间之间的来回切换 中国标准时间转换为xxxx-xx-xx格式 ...

  8. 在vue项目中快速使用element UI

    Element UI是饿了么团队提供的一套基于Vue2.0的组件库,可以快速的搭建网站,提高开发的效率 ElementUI PC端 MintUI 移动端 一.全部引入 安装element-ui cnp ...

  9. Vue+JS+Element UI实战(电商项目1)

    目录 1.电商业务概述 2.电商后台管理系统的功能 ​3.项目初始化步骤 4.后台项目的环境安装配置 4.1. API V1 接口说明 4.2. 支持的请求方法 4.3. 通用返回状态说明 5.测试后 ...

最新文章

  1. 酷欧天气(CoolWeather)应用源码
  2. 【Python】25个好用到爆的一行Python代码,建议收藏
  3. foxmail卡顿_Foxmail
  4. Linux的vagrant配置vmware
  5. squid代理服务器详解
  6. jQuery.sap.getModulePath(cus.crm.opportunity.css.Opportunity, .css)
  7. pku 3252 Round Numbers 组合数学 找规律+排列组合
  8. python输出箭头代码_python matplotlib 注释文本箭头简单代码示例
  9. ROS报错:/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h:119:9: error: ‘YOU_MIXED_DIFFERENT
  10. php安全测试工具,免费的高级Web应用程序安全测试工具
  11. OpenGL C#绘图环境配置
  12. select null and select 1
  13. android 过滤ip,EditText Android过滤器的IP地址###。###。###。###?
  14. 三菱fx2n做从站的modbus通讯_三菱PLC编程多种电缆接线图,收藏向!
  15. Windows 系统常用工具软件
  16. HDU3533Escape(BFS )
  17. linux查看ip命令
  18. 【转载】社会网络中心性度量
  19. LeetCode-121. 买卖股票的最佳时机(java)
  20. Vue脚手架安装流程详解

热门文章

  1. 一个计算机台式机的组装方案,既能带又便宜的电脑组装方案,华擎deskmini310组装晒单...
  2. c语言第一周作业答案,C语言程序设计下mooc答案.pdf
  3. 用ubuntu远程连接mysql_Ubuntu 安装 MySQL 和远程连接
  4. linux 中如何查看块设备,在linux中,如何确定使用块设备的进程?
  5. C++ multimap的插入
  6. 数字图像处理:图像的频域
  7. QT+OpenCV综合示例:图像混合(滑动条)
  8. 吴恩达作业6:梯度检验
  9. NFS服务器原理、搭建、配置
  10. C语言中生成可执行程序的过程