当前位置: 首页 > news >正文

Element-06.案例

一.目标

实现下面这个页面,表格中的数据使用axois异步加载数据

二.实现步骤 

首先在vue项目的views文件夹中新建一个tlias文件夹,用来存储该案例的相关组件。员工页面组件(EmpView.vue)和部门页面组件(DeptView.vue)分别在tlias文件夹中创建好。

在App.vue中的<template>标签中引入<emp-view>标签,并在<script>标签中导入EmpView.vue组件。 components中加入EmpView组件。

<!-- 模板部分,由他生成HTML代码  相当于vue当中的视图部分 -->
<template><div>   <!-- div是根标签,一个<template>标签中只能有一个根标签,也即只能有一个<template>标签 --><!-- <h1>{{ message }}</h1> --><!-- <element-view></element-view> --><emp-view></emp-view><!-- <router-view></router-view> --></div>
</template><!-- JS代码,定义vue当中的数据模型以及当中的方法 -->
<script>
/* 
import ElementView from './views/element/ElementView.vue'  将ElementView.vue组件文件导入并重新命名为ElementView  注意:<template>标签里面没有定义标签,那么import的话会报错
*/import EmpView from './views/tlias/EmpView.vue'export default {components: { EmpView },   // components里面也不能有<template>中未定义的标签的vue组件data () {return {/* message:"Hello Vue"     */}},methods: {}}
</script><!-- 定义CSS样式 -->
<style></style>

1.页面基本布局

        首先页面呈现出顶栏,左边栏,然后主区域的整体布局,因此要实现这种布局。我们在element组件中找到这一布局。

 然后找到对应的代码复制到员工页面组件的<template>标签中。

<el-container><el-header>Header</el-header><el-container><el-aside width="200px">Aside</el-aside><el-main>Main</el-main></el-container>
</el-container>

浏览器页面结构如下: 

 

在实现了基本布局后,发现这三部分并没有边框线,因此要在这三部分中加上边框线。

 第一行代码改下:

<el-container style="height: 800px; border: 1px solid #eee">

下面在<el-header>标签中设置要展示的标题。

<el-header style="font-size: 40px; background-color: #6495ED;">tlias智能学习辅助系统</el-header>

header部分设计好后,接下来在<el-aside>标签中设置我们需要的样式 。首先在element组件库中寻找符合我们要求的样式。

<el-aside width="200px" style="background-color: rgb(238, 241, 246)"><el-menu :default-openeds="['1', '3']"><el-submenu index="1"><template slot="title"><i class="el-icon-message"></i>导航一</template><el-menu-item-group><template slot="title">分组一</template><el-menu-item index="1-1">选项1</el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group><el-menu-item-group title="分组2"><el-menu-item index="1-3">选项3</el-menu-item></el-menu-item-group><el-submenu index="1-4"><template slot="title">选项4</template><el-menu-item index="1-4-1">选项4-1</el-menu-item></el-submenu></el-submenu><el-submenu index="2"><template slot="title"><i class="el-icon-menu"></i>导航二</template><el-menu-item-group><template slot="title">分组一</template><el-menu-item index="2-1">选项1</el-menu-item><el-menu-item index="2-2">选项2</el-menu-item></el-menu-item-group><el-menu-item-group title="分组2"><el-menu-item index="2-3">选项3</el-menu-item></el-menu-item-group><el-submenu index="2-4"><template slot="title">选项4</template><el-menu-item index="2-4-1">选项4-1</el-menu-item></el-submenu></el-submenu><el-submenu index="3"><template slot="title"><i class="el-icon-setting"></i>导航三</template><el-menu-item-group><template slot="title">分组一</template><el-menu-item index="3-1">选项1</el-menu-item><el-menu-item index="3-2">选项2</el-menu-item></el-menu-item-group><el-menu-item-group title="分组2"><el-menu-item index="3-3">选项3</el-menu-item></el-menu-item-group><el-submenu index="3-4"><template slot="title">选项4</template><el-menu-item index="3-4-1">选项4-1</el-menu-item></el-submenu></el-submenu></el-menu></el-aside>

将代码删减成为我们所需要的样子。

<el-aside width="220px" style="background-color: rgb(238, 241, 246); border: 1px solid #eee"><el-menu :default-openeds="['1', '3']"><el-submenu index="1"><template slot="title"><i class="el-icon-message"></i>系统信息管理</template><el-menu-item-group><el-menu-item index="1-1"><router-link to="/dept">部门管理</router-link>    </el-menu-item><el-menu-item index="1-2"><router-link to="/emp">员工管理</router-link>    </el-menu-item></el-menu-item-group></el-submenu></el-menu></el-aside>

header和aside设计好后,下面主要设计main部分。

2.页面组件实现

在main区域中首先分为以下几个部分:

最上面是表单,中间是表格,下面是分页栏。 因此需要这三部分的组件来实现。

首先是表单,表单采用的是行内表单。

          <el-form :inline="true" :model="searchEmp" class="demo-form-inline"><el-form-item label="姓名"><el-input v-model="searchEmp.name" placeholder="请输入员工姓名"></el-input></el-form-item><el-form-item label="性别"><el-select v-model="searchEmp.gender" placeholder="请选择"><el-option label="男" value="1"></el-option><el-option label="女" value="2"></el-option></el-select></el-form-item><el-form-item label="入职时间"><!-- 日期选择器 --><el-date-picker v-model="searchEmp.entryDate" type="daterange" range-separator="至"start-placeholder="开始日期" end-placeholder="结束日期"><!-- 绑定在searchEmp对象中的entryDate属性中去,entryDate属性是一个数组,有开始日期和结束日期 --></el-date-picker></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item></el-form>

在表单中我们通过v-bind绑定了一个数据模型,是一个对象模型,命名为searchEmp,用来记住查询到的对象。所有的表单项都绑定在searchEmp这个对象当中。通过v-model实现searchEmp对象的name属性,gender属性和entryDate属性的双向绑定。

通过@click绑定一个事件onSubmit,当点击查询时会将数据提交,触发onSubmit方法。

methods: {onsubmit:function() {alert("开始查询数据~")},handleSizeChange:function(val) {alert("当前页面条数为:" + val)},handleCurrentChange:function(val) {alert("当前页为:" + val)}}

对象searchEmp要在vue对象中定义,其中的entryDate属性要定义一个日期选择器,包含开始日期和结束日期。entryDate属性是一个数组。

    data () {return {searchEmp: {name:"",gender:"",entryDate:[]},tableData:[]}}

接着是表格

<!-- 表格 --><el-table :data="tableData" :border="true"> <!-- tableData数据模型是一个数组,需要在Vue对象的数据模型中定义 --><el-table-column prop="name" label="姓名" width="120"></el-table-column><el-table-column label="图像" width="140"><!-- 图像要指定一个scope插槽 --><template slot-scope="scope"><img :src="scope.row.image" width="50px">   <!-- 这个插槽展示图片,为src属性通过v-bind动态绑定一个值,即当前列中的每一行的image属性 --></template></el-table-column><el-table-column label="性别" width="140"><!-- 性别要指定一个scope插槽,通过scope插槽可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据 --><template slot-scope="scope">{{ scope.row.gender==1?'男':'女' }}    <!-- 获取当前列中每一行的gender属性并判断是否==1,是为男,不是为女 --></template></el-table-column><el-table-column prop="job" label="职位" width="140"></el-table-column><el-table-column prop="entrydate" label="入职日期" width="200"></el-table-column><el-table-column prop="updatedate" label="最后操作时间" width="200"></el-table-column><el-table-column label="操作" width="200"><el-button type="primary" size="mini">编辑</el-button><el-button type="danger" size="mini">删除</el-button></el-table-column>    <!-- prop要与JSON数据中的属性名保持一致 --></el-table>

表格中通过v-bind绑定了一个属性tableData,该属性用于存储表格中的数据。表格中的数据仍是以数组形式进行存储的,因此在数据模型中进行声明。(见上面代码)

在表格的图像和性别区,会展示出value值而并非内容。为了解决这一问题,需要使用到插槽。

<el-table-column label="图像" width="140"><!-- 图像要指定一个scope插槽 --><template slot-scope="scope"><img :src="scope.row.image" width="50px">   <!-- 这个插槽展示图片,为src属性通过v-bind动态绑定一个值,即当前列中的每一行的image属性 --></template></el-table-column><el-table-column label="性别" width="140"><!-- 性别要指定一个scope插槽,通过scope插槽可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据 --><template slot-scope="scope">{{ scope.row.gender==1?'男':'女' }}    <!-- 获取当前列中每一行的gender属性并判断是否==1,是为男,不是为女 --></template></el-table-column>

在图像中动态绑定src属性,使得图像这一列的每一行数据中的image属性动态绑定给src。

在性别中对这一列的每一行数据中的gender属性做判断,如果==1则性别为男,否则为女,使用三元运算符。

scope.row.image
scope.row.gender

3.分页组件实现

<el-pagination background layout="sizes, prev, pager, next, jumper"@size-change="handleSizeChange" @current-change="handleCurrentChange" :total="1000"><!-- :total="1000", 写全 v-bind:total="1000", ":"语法是 v-bind: 的简写,用于绑定一个动态的值到属性 --><!-- size-change	pageSize 改变时会触发	回调参数:每页条数 --><!-- current-change	currentPage 改变时会触发	回调参数:当前页 --><!-- @:v-on的简写 v-on为el-button标签绑定了一个事件click--></el-pagination>

分页组件中有两个方法,详见Element-03.组件-Pagination分页-CSDN博客。同时所定义的方法要在vue对象中加以声明。

methods: {onsubmit:function() {alert("开始查询数据~")},handleSizeChange:function(val) {alert("当前页面条数为:" + val)},handleCurrentChange:function(val) {alert("当前页为:" + val)}}

 三.axios异步加载数据

使用axios异步加载数据,达到在页面中能够动态展示的效果。在mounted方法中当模型挂载完毕后,通过get方法拿到数据并将其中的data数组赋值给vue对象的tableData数组。

mounted () {axios.get("https://yapi.pro/mock/401965/user/getById").then((result) => {this.tableData=result.data.data });}

在<script>标签中引入axios 

<script>
import axios from 'axios';

相关具体原理参考Ajax-03.Axios-案例-CSDN博客

这样整个案例便制作完成。

http://www.lryc.cn/news/428187.html

相关文章:

  • Axure高端交互元件库:助力产品与设计
  • 后端开发刷题 | 二叉树的前序遍历
  • 自动化之响应式Web设计:纯HTML和CSS的实现技巧
  • SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击
  • uView的u-notice-bar组件横向滚动不生效问题解决
  • 基于免疫算法的最优物流仓储点选址方案MATLAB仿真
  • 基于Java爬取微博数据(三) 微博主页用户数据
  • Openstack 与 Ceph集群搭建(中): Ceph部署
  • 上市公司上下游、客户数据匹配数据集(2001-2023年)
  • Promise 对象
  • 扫码头测试检测适配步骤
  • 解决k8s分布式集群,子节点加入到主节点失败的问题
  • 什么是XSS跨站攻击?如何防护?
  • 谷粒商城实战笔记-问题记录-首页没有显示用户名-跨域session问题
  • 【面试宝典】redis常见面试题总结(上)
  • 数据仓库: 3- ETL过程
  • js数组变字符串
  • 日常问题笔记1
  • 位图与布隆过滤器 —— 海量数据处理
  • 二:《Python基础语法汇总》— 条件判断与循环结构
  • 【威锋网-注册安全分析报告-无验证方式导致安全隐患】
  • 01_React简介、基础入门
  • 【Java 内存区域】
  • 你是如何克服编程学习中的挫折感的?
  • 【AI应用实战】灵办AI插件集成详细指南
  • MySQL数据库连接超时问题排查报告
  • 代码随想录第三天 | 链表
  • Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用
  • putty中修改默认窗口大小和字体、字号
  • Windows下网络编与ESP8266-WiFi通信(win32-API)