一起学Vue:UI框架(element-ui)
目标
使用Vue+ElementUI构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式。
效果页面
比如我们要实现这样列表、新增、编辑三个页面:
列表页面

新增页面

编辑页面

安装element
我们使用 vue-cli@3 进行安装
vue add element
列表组件(TodoListWithUI.vue)
与我们上次讲的无UI的列表组件逻辑基本都是一样的,我们这里主要用到了el-table,el-button这两个UI组件,至于UI组件的用法我们这里就不介绍了,大家直接上官网上看示例代码就好了,我们在这里直接贴代码:
<template>
<div style="text-align:left">
    <el-button type="text" @click="addTodo()">新增</el-button>
    <el-table :data="Todos" style="width: 100%">
        <el-table-column type="index" width="50">
        </el-table-column>
        <el-table-column prop="Name" label="名称">
        </el-table-column>
        <el-table-column fixed="right" label="操作" width="100">
            <template slot-scope="scope">
                <el-button @click="editTodo(scope.$index)" type="text" size="small">编辑</el-button>
                <el-button @click="deleteTodo(scope.$index)" type="text" size="small">删除</el-button>
            </template>
        </el-table-column>
    </el-table>
    <TodoAddWithUI :dialogVisible="addDialogVisible" :selectedItem="selectedItem" @save="createTodo"  @cancel="cancel"></TodoAddWithUI>
    <TodoEditWithUI :dialogVisible="editDialogVisible" :selectedItem="selectedItem" @save="updateTodo" @cancel="cancel"></TodoEditWithUI>
</div>
</template>
<script>
import TodoAddWithUI from './TodoAddWithUI.vue'
import TodoEditWithUI from './TodoEditWithUI.vue'
export default {
    components: {
        TodoAddWithUI,
        TodoEditWithUI
    },
    data() {
        return {
            selectedIndex: -1, // 选择了哪条记录
            selectedItem: {}, // 选中的信息
            addDialogVisible: false,
            editDialogVisible: false,
            Todos: [{
                    Name: "遛狗"
                },
                {
                    Name: "跑步"
                }
            ]
        };
    },
    methods: {
        setTodos(arr) {
            this.Todos = JSON.parse(JSON.stringify(arr));
        },
        addTodo() {
            this.addDialogVisible = true;
        },
        createTodo(item) {
            this.Todos.push(item);
            this.setTodos(this.Todos);
            this.selectedIndex = -1;
            this.selectedItem = {}
            this.addDialogVisible = false;
        },
        editTodo(index) {
            this.selectedIndex = index;
            this.selectedItem = JSON.parse(JSON.stringify(this.Todos[index]));
            this.editDialogVisible = true;
        },
        updateTodo(item) {
            this.Todos[this.selectedIndex] = item;
            this.setTodos(this.Todos);
            this.selectedIndex = -1;
            this.selectedItem = {}
            this.editDialogVisible = false;
        },
        deleteTodo(index) {
            this.Todos.splice(index, 1);
            this.selectedIndex = -1;
            this.selectedItem = {}
        },
        cancel() {
            this.addDialogVisible = false;
            this.editDialogVisible = false;
        },
    }
};
</script>
新增组件(TodoAddWithUI.vue)
我们主要用到了el-dialog,el-form,直接贴代码:
<template>
<el-dialog title="待办事项(新增)" :visible.sync="dialogVisible">
  <el-form>
    <el-form-item label="名称">
      <el-input v-model="selectedItem.Name" autocomplete="off"></el-input>
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button @click="cancel">取 消</el-button>
    <el-button type="primary" @click="save">确 定</el-button>
  </div>
</el-dialog>
</template>
<script>
export default {
    props: {
        selectedItem: Object,
        dialogVisible: Boolean,
    },
    methods: {
        save() {
            this.$emit('save', this.selectedItem);
        },
        cancel() {
            this.$emit('cancel');
        }
    }
};
</script>
<style scoped>
</style>
编辑组件(TodoEditWithUI.vue)
我TodoAddWithUI基本上一样,你也可以把这两个合并成一个组件,我们为了逻辑更加清楚就分开了,直接贴代码:
<template>
<el-dialog title="待办事项(编辑)" :visible.sync="dialogVisible">
  <el-form>
    <el-form-item label="名称">
      <el-input v-model="selectedItem.Name" autocomplete="off"></el-input>
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button @click="cancel">取 消</el-button>
    <el-button type="primary" @click="save">确 定</el-button>
  </div>
</el-dialog>
</template>
<script>
export default {
    props: {
        selectedItem: Object,
        dialogVisible: Boolean,
    },
    methods: {
        save() {
            this.$emit('save', this.selectedItem);
        },
        cancel() {
            this.$emit('cancel');
        }
    }
};
</script>
<style scoped>
</style>
小结
目前为止,我们完成了Vue+ElementUI的CRUD,是不是还是挺简单的呀。其实你如果用其他的UI框架,操作方式也差不多。
文中用到的代码我们放在:https://github.com/zcqiand/miscellaneous/tree/master/vue
在这里我推荐一些人气比较高的UI框架:
1.Vuetify
Star 数为 11K,提供了 80 多个 Vue.js 组件,这些组件是根据谷歌 Material Design 指南实现的。Vuetify 支持所有平台上的浏览器,包括 IE11 和 Safari 9+(使用 polyfill),并提供了 8 个 vue-cli 模板。
地址:https://github.com/vuetifyjs/vuetify
2.Quasar
Star 数超过 6K,是构建 Vue.js 响应式网站、PWA、混合移动应用和 Electron 应用的流行框架。Quasar 还支持诸如 HTML/CSS/JS 压缩、缓存清除、摇树优化(tree shaking)、源映射、代码分割和延迟加载、ES6 转码等功能。
地址:https://github.com/quasarframework/quasar
3. Vux
Star 数超过 13K,是一个流行的社区库,基于 WeUI 和 Vue 2.0。该库还支持 webpack+vue-loader+vux 的工作流。它的文档也是中文的。
地址:https://github.com/airyland/vux
4. iView
Star 数将近 16K,提供了数十种用 Vue.js 构建的 UI 组件和小部件,并采用了干净而优雅的设计。iView 被广泛采用,社区也在积极维护,并提供了 CLI 工具用于以可视化的方式创建项目。这个也值得一试。
地址:https://github.com/iview/iview
5.Mint UI
Star 数超过 11K,为 Vue.js 提供 UI 元素,提供了用于构建移动应用程序的 CSS 和 JS 组件。当全部导入时,压缩后的代码只有月 30KB(JS+CSS),当然它也支持单个组件的导入。
地址:https://github.com/ElemeFE/mint-ui/
6.Ant Design Vue
Star 数约 1.5K,用于开发具有数十个 Ant Design 实现组件的企业级后端产品,并支持基于 Webpack 调试的构建解决方案(支持 ES6)。请注意,它的开发已经停止了一段时间。
地址:https://github.com/okoala/vue-antd
一起学Vue:UI框架(element-ui)的更多相关文章
- FastAPI实践项目:SayHello(FastAPI + vue.js + axios + element ui)
		
目录 简介 翻版 VS 本尊 后端服务 源码 接下来 简介 这次带来的是FastAPI + vue.js + axios + element ui (一个html文件里使用的) 实现的<Flas ...
 - HTML5 UI框架Kendo UI Web中如何创建自定义组件(二)
		
在前面的文章<HTML5 UI框架Kendo UI Web自定义组件(一)>中,对在Kendo UI Web中如何创建自定义组件作出了一些基础讲解,下面将继续前面的内容. 使用一个数据源 ...
 - Vue框架Element UI教程-axios请求数据
		
Element UI手册:https://cloud.tencent.com/developer/doc/1270 中文文档:http://element-cn.eleme.io/#/zh-CN gi ...
 - vue项目使用element ui的Checkbox
		
最近使用到element ui的下拉多选框Checkbox Checkbox用法可参考与于 http://element.eleme.io/#/zh-CN/component/checkbox Che ...
 - vue同时安装element ui跟 vant
		
记一个卡了我比较久的问题,之前弄的心态爆炸各种问题. 现在来记录一下,首先我vant是已经安装成功了的. 然后引入element ui npm i element-ui -S 接着按需引入,安装插件 ...
 - 创新高性能移动 UI 框架-Canvas UI 框架
		
WebView 里无法获得的能力虽然是「体验增强」与「端基本能力」,但现都基本上有成熟解决方法.但后期的 UI 和 Layout 的性能反而是目前 Web 技术欠缺的.所以,无论是 Titanium ...
 - 很好的开源UI框架Chico UI
		
介绍一个很好的开源的UI框架,依赖于jquery 官网:http://www.chico-ui.com.ar/ 以下是相关截图: 消息提示 自动完成 分页,列表 Chico UI是什么? Chico ...
 - 基于Vue的UI框架element el-table表格的自定义排序
		
html部分: <el-table-column prop="phoneCache" label="手机缓存包编号" align="center ...
 - vue中修改Element ui样式不起作用
		
公司做的一个后台系统,由于Elemen ui是响应式的,在小屏笔记本中,一行两列的表单会自动变成一行一列,这样就很不美观了,由于是后台系统,当时也没考虑适配问题. 老总 地表最强的电脑 运行了一下,当 ...
 - 在vue中关于element UI 中表格实现下载功能,表头添加按钮,和点击事件失效的解决办法。
		
因为在element 中表格是使用el-table的形式通过数据来支撑结构,所以,表格的样式没有自己写的灵活,所以有了没法添加按钮的烦恼.下面是解决的方法. 准备工作: 一.下载npm安装包两个 1. ...
 
随机推荐
- python安装和首次使用
			
安装: 1.安装python环境: 首先打开python官网,下载配置环境:www.python.org 点击上方downloads, 根据系统选择python环境下载 找到 windows x86- ...
 - YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
			
本文将介绍 YOLOv4 官方 Darknet 实现,如何于 Ubuntu 18.04 编译,及使用 Python 接口. 主要内容有: 准备基础环境: Nvidia Driver, CUDA, cu ...
 - PageObject课程培训记录
			
前言 昨晚的培训课程讲了PO设计模式,对于PO模式我们需要去了解关于为什么要使用PO,而不使用PO是什么情况?什么是PO模式?PO怎么去使用? 第一,为什么要使用PO,而不使用PO是什么情况? 我们先 ...
 - CLP(FD)有限域上的约束逻辑式编程
			
译自http://www.pathwayslms.com/swipltuts/clpfd/clpfd.html#_simple_constraints,SWI-Prolog官网所推荐的进阶教程.目前还 ...
 - 05 C语言的数据类型
			
C语言的数据类型 在C 中,数据类型是用来声明不同类型的变量或函数的一个广泛的概念.变量的数据类型决定了变量存储占用的空间大小,以及如何去解释存储的位模式. C 中的数据类型可分为以下几大类: 序号 ...
 - Matlab .asv文件
			
参考: https://blog.csdn.net/u013152895/article/details/44724199 有时在存放m文件的文件夹中会出现*.asv asv 就是auto save的 ...
 - 使用 .NET 进行游戏开发
			
微软是一家综合性的网络公司,相信这点来说不用过多的赘述,没有人不知道微软这个公司,这些年因为游戏市场的回报,微软收购了很多的游戏公司还有独立工作室,MC我的世界就是最成功的的案例,现在市值是排在全世界 ...
 - Vue3实战系列:结合 Ant-Design-of-Vue 实践 Composition API
			
Vue 3 出来之后,很多人有如下想法,"又要学新东西啦"."我学不动了"等等. 但是事物总有它的两面性,前端知识更新的很快,利好勤奋好学的同学.计算机行业的迭 ...
 - mongoose 查询数据属性为数组,且包含某个值的方法
			
mongoose在创建schema的时候有些属性需要设置为数组类型,比如商品图片.商品标签.不同尺寸.价格等. 那么怎么查询具有某个标签的商品了,下面记录一下两种情况: 查询具有'vue'标签的文章 ...
 - 35岁老半路程序员的Python从0开始之路
			
9年的ERP程式开发与维护,继而转向一年的售前,再到三年半的跨行业务,近4的兜兜转转又转回来做程式了,不过与之前不同的,是这次是新的程序语言Python, 同时此次是为了教学生而学习! 从今天开始,正 ...