Vue使用Element实现增删改查+打包的步骤


Posted in Vue.js onNovember 25, 2020

在我们进行项目开发期间,避免不了使用各式各样的组件,Element是由饿了么公司前端团队开源。样式精美、组件齐全、易于上手。

效果:

Vue使用Element实现增删改查+打包的步骤

组件使用

我们利用vue-cli创建一个项目,然后只需要安装element-ui即可

安装:npm i element-ui -S

然后在main.js中引用一下样式即可,可以选择按需加载,我们这边因为是演示一下,所以不去进行调整,项目中如果使用到的组件不多,可以选择按需加载。

main.js

import Vue from 'vue';
import App from './App.vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.config.productionTip = false;

Vue.use(ElementUI);

new Vue({
 render: h => h(App),
}).$mount('#app')

然后我们在src/components下新建一个组件,用来写我们的展示组件,然后在app.vue中导入即可

app.vue

<template>
 <div id="app">
  <Creator content1="憧憬"/>
 </div>
</template>

<script>
import Creator from './components/Creator/Creator';

export default {
 name: 'app',
 components: {
  Creator
 }
}
</script>

我们首先先使用表格,将数据展示出来

Creator.vue

<template>
  <div class="Creator">
    <el-row :gutter="20">
      <el-col :span="6">
        <el-input v-model="content" placeholder="请输入内容"></el-input>
      </el-col>

      <el-col :span="2">
        <el-button type="primary">搜索</el-button>
      </el-col>
    </el-row>

    <div style="height: 20px"/>

    <el-row :gutter="10" type="flex" justify="center">
      <el-col :span="14">
        <el-table
            :data="tableData"    // 声明列表使用的数据
            :key="'zip'"      // 声明每一行的key
            border
            style="width: 100%">
          <el-table-column
              fixed
              prop="date"
              label="日期"
              width="150">
          </el-table-column>
          <el-table-column
              prop="name"     // 对应tableData里面的需要展示的键
              label="姓名"
              width="120">
          </el-table-column>
          <el-table-column
              prop="province"
              label="省份"
              width="120">
          </el-table-column>
          <el-table-column
              prop="city"
              label="市区"
              width="120">
          </el-table-column>
          <el-table-column
              prop="address"
              label="地址"
              width="300">
          </el-table-column>
          <el-table-column
              prop="zip"
              label="邮编"
              width="120">
          </el-table-column>
          <el-table-column
              fixed="right"
              label="操作"
              width="160"
              v-slot="scope" // 获取每一行的数据
           >
            <template>    
              <el-button @click="handleCreate(scope.row)"   type="text" size="small">添加</el-button>
              <el-popconfirm
                  confirmButtonText='好的'
                  cancelButtonText='不用了'
                  icon="el-icon-info"
                  iconColor="red"
                  title="这是一段内容确定删除吗?"
                  @onConfirm="handleDelete(scope.row)"
              >
                <el-button slot="reference" type="text" size="small">删除</el-button>
              </el-popconfirm>
            </template>
          </el-table-column>
        </el-table>
      </el-col>
    </el-row>


    <el-dialog title="添加用户" :visible.sync="dialogFormVisible">
    // rules指定表单验证规则
      <el-form :model="form" status-icon ref="ruleForm" :rules="rules" :label-position="'right'">
        <el-row :gutter="10">
          <el-col :span="11">
            <el-form-item prop="name" label="姓名" :label-width="formLabelWidth">
              <el-input style="width: 200px" v-model="form.name" autocomplete="off"></el-input>
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="10">
          <el-col :span="11">
            <el-form-item
                prop="dates"  // 需要验证的字段 需要对应rules里面的键
                label="日期"
                :label-width="formLabelWidth"
                :rules="[
                  {required: true, message: '必须选择一个日期', trigger: 'blur'},
                ]"     // 也可以直接写在item里面验证 也可以全放在rules。我这里是采取了两种方式
            >
              <el-date-picker
                  v-model="form.dates"
                  align="right"
                  type="date"
                  placeholder="选择日期"
                  format="yyyy 年 MM 月 dd 日" // 展示数据的格式
                  value-format="yyyy-MM-dd"    // 声明点击后的数据格式
                  :picker-options="pickerOptions">
              </el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="onOk">确 定</el-button>
      </div>
    </el-dialog>

  </div>
</template>

<script>
  export default {
    props: {
      content1: {required: true, type: String}
    },

    data() {
    
      // 自定义验证函数 给name验证
      const validatName = (rule, value, callback) => {
        if (!value) return callback(new Error('名字不能为空'));
        if (value.length <= 0) return callback(new Error('最少一个字符'));
        return callback();
      };

      return {
        content: this.content1,
        tableData: [
          {
            date: '2016-05-02',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1518 弄',
            zip: 200331
          }, {
            date: '2016-05-04',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1517 弄',
            zip: 200332
          }, {
            date: '2016-05-01',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1519 弄',
            zip: 200333
          }, {
            date: '2016-05-03',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1516 弄',
            zip: 200334
          }],

        formLabelWidth: '120px',

        // 控制模态是否展示
        dialogFormVisible: false,
        form: {
          name: '',
          dates: null,
        },

        // 对picker组件的扩展
        pickerOptions: {
          // 将之后的时间禁用 不然选择
          disabledDate(time) {
            return time.getTime() > Date.now();
          },
          
          // 增加 今天 昨天 一周前的快速选项
          shortcuts: [{
            text: '今天',
            onClick(picker) {
              picker.$emit('pick', new Date());
            }
          }, {
            text: '昨天',
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24);
              picker.$emit('pick', date);
            }
          }, {
            text: '一周前',
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit('pick', date);
            }
          }]
        },

        
        // 定义输入规则
        rules: {
          name: [
              // 指定验证函数       触发时机。这个是失去焦点触发
            {validator: validatName, trigger: 'blur'}
          ],
        },
      };
    },

    methods: {
      onOk() {
        
        // 使用ref进行验证 validate传入一个函数 返回一个验证是否成功的bool值
        this.$refs['ruleForm'].validate((valid) => {
          if (valid) {

            const {
              name,
              dates
            } = this.form;

          // 避免zip重复 zip++
            const maxZip = Math.max(...this.tableData.map(item => item.zip)) + 1;

            const obj = {
              name,
              date: dates,
              province: '北京',
              city: '普陀区',
              address: '上海市普陀区金沙江路 1518 弄',
              zip: maxZip
            };

        // push到数据里面
            this.tableData.push(obj);

        // 将模态隐藏
            this.dialogFormVisible = false;
          } else {
            return false;
          }
        });
      },

      // 删除数据
      handleDelete(row) {
        this.tableData.map((item, index) => {
          if (item.zip === row.zip) {
            this.tableData.splice(index, 1);
          }
        });
      },

      handleCreate() {
        // 模态展示
        this.dialogFormVisible = true;
      }
    }
  };
</script>

一套基本的增删改查就可以了呀,Vue有一套admin模版,开箱即用。
vue-element-admin非常不错,大家可以去使用一下子

打包

默认打包的话会导致静态资源引用存在问题,打开一片空白,所以我们打包前需要先配置一下静态资源
package.json这个文件同级的目录,新建一个vue.config.js,加入如下配置

/**
 * Created By 憧憬
 */
module.exports = {
  publicPath: './'    // 静态资源目录配置为./ 当前目录
};

以上就是Vue使用Element实现增删改查+打包的步骤的详细内容,更多关于vue 增删改查+打包的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
Vue实现图书管理案例
Jan 20 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
如何在 Vue 表单中处理图片
Jan 26 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
vue完美实现el-table列宽自适应
May 08 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
使用vue判断当前环境是安卓还是IOS
Apr 12 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 #Vue.js
vue打开其他项目页面并传入数据详解
Nov 25 #Vue.js
Vue开发中常见的套路和技巧总结
Nov 24 #Vue.js
浅析VUE防抖与节流
Nov 24 #Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 #Vue.js
Vue 的 v-model用法实例
Nov 23 #Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 #Vue.js
You might like
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
Python底层封装实现方法详解
2020/01/22 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
一套Java笔试题
2016/08/20 面试题
法务专员岗位职责
2014/01/02 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
行政复议决定书
2015/06/24 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python