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

时间:2021-11-18 03:13:36

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

效果:

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

组件使用

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

安装:npm i element-ui -S

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

main.js

?
1
2
3
4
5
6
7
8
9
10
11
12
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<template>
 <div id="app">
  <Creator content1="憧憬"/>
 </div>
</template>
 
<script>
import Creator from './components/Creator/Creator';
 
export default {
 name: 'app',
 components: {
  Creator
 }
}
</script>

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

Creator.vue

  1. <template> 
  2.   <div class="Creator"
  3.     <el-row :gutter="20"
  4.       <el-col :span="6"
  5.         <el-input v-model="content" placeholder="请输入内容"></el-input> 
  6.       </el-col> 
  7.  
  8.       <el-col :span="2"
  9.         <el-button type="primary">搜索</el-button> 
  10.       </el-col> 
  11.     </el-row> 
  12.  
  13.     <div style="height: 20px"/> 
  14.  
  15.     <el-row :gutter="10" type="flex" justify="center"
  16.       <el-col :span="14"
  17.         <el-table 
  18.             :data="tableData"    // 声明列表使用的数据 
  19.             :key="'zip'"      // 声明每一行的key 
  20.             border 
  21.             style="width: 100%"
  22.           <el-table-column 
  23.               fixed 
  24.               prop="date" 
  25.               label="日期" 
  26.               width="150"
  27.           </el-table-column> 
  28.           <el-table-column 
  29.               prop="name"     // 对应tableData里面的需要展示的键 
  30.               label="姓名" 
  31.               width="120"
  32.           </el-table-column> 
  33.           <el-table-column 
  34.               prop="province" 
  35.               label="省份" 
  36.               width="120"
  37.           </el-table-column> 
  38.           <el-table-column 
  39.               prop="city" 
  40.               label="市区" 
  41.               width="120"
  42.           </el-table-column> 
  43.           <el-table-column 
  44.               prop="address" 
  45.               label="地址" 
  46.               width="300"
  47.           </el-table-column> 
  48.           <el-table-column 
  49.               prop="zip" 
  50.               label="邮编" 
  51.               width="120"
  52.           </el-table-column> 
  53.           <el-table-column 
  54.               fixed="right" 
  55.               label="操作" 
  56.               width="160" 
  57.               v-slot="scope" // 获取每一行的数据 
  58.            > 
  59.             <template>    
  60.               <el-button @click="handleCreate(scope.row)"   type="text" size="small">添加</el-button> 
  61.               <el-popconfirm 
  62.                   confirmButtonText='好的' 
  63.                   cancelButtonText='不用了' 
  64.                   icon="el-icon-info" 
  65.                   iconColor="red" 
  66.                   title="这是一段内容确定删除吗?" 
  67.                   @onConfirm="handleDelete(scope.row)" 
  68.               > 
  69.                 <el-button slot="reference" type="text" size="small">删除</el-button> 
  70.               </el-popconfirm> 
  71.             </template> 
  72.           </el-table-column> 
  73.         </el-table> 
  74.       </el-col> 
  75.     </el-row> 
  76.  
  77.  
  78.     <el-dialog title="添加用户" :visible.sync="dialogFormVisible"
  79.     // rules指定表单验证规则 
  80.       <el-form :model="form" status-icon ref="ruleForm" :rules="rules" :label-position="'right'"
  81.         <el-row :gutter="10"
  82.           <el-col :span="11"
  83.             <el-form-item prop="name" label="姓名" :label-width="formLabelWidth"
  84.               <el-input style="width: 200px" v-model="form.name" autocomplete="off"></el-input> 
  85.             </el-form-item> 
  86.           </el-col> 
  87.         </el-row> 
  88.  
  89.         <el-row :gutter="10"
  90.           <el-col :span="11"
  91.             <el-form-item 
  92.                 prop="dates"  // 需要验证的字段 需要对应rules里面的键 
  93.                 label="日期" 
  94.                 :label-width="formLabelWidth" 
  95.                 :rules="[ 
  96.                   {required: true, message: '必须选择一个日期', trigger: 'blur'}, 
  97.                 ]"     // 也可以直接写在item里面验证 也可以全放在rules。我这里是采取了两种方式 
  98.             > 
  99.               <el-date-picker 
  100.                   v-model="form.dates" 
  101.                   align="right" 
  102.                   type="date" 
  103.                   placeholder="选择日期" 
  104.                   format="yyyy 年 MM 月 dd 日" // 展示数据的格式 
  105.                   value-format="yyyy-MM-dd"    // 声明点击后的数据格式 
  106.                   :picker-options="pickerOptions"
  107.               </el-date-picker> 
  108.             </el-form-item> 
  109.           </el-col> 
  110.         </el-row> 
  111.       </el-form> 
  112.       <div slot="footer" class="dialog-footer"
  113.         <el-button @click="dialogFormVisible = false">取 消</el-button> 
  114.         <el-button type="primary" @click="onOk">确 定</el-button> 
  115.       </div> 
  116.     </el-dialog> 
  117.  
  118.   </div> 
  119. </template> 
  120.  
  121. <script> 
  122.   export default { 
  123.     props: { 
  124.       content1: {required: true, type: String} 
  125.     }, 
  126.  
  127.     data() { 
  128.      
  129.       // 自定义验证函数 给name验证 
  130.       const validatName = (rule, value, callback) => { 
  131.         if (!value) return callback(new Error('名字不能为空')); 
  132.         if (value.length <= 0) return callback(new Error('最少一个字符')); 
  133.         return callback(); 
  134.       }; 
  135.  
  136.       return { 
  137.         content: this.content1, 
  138.         tableData: [ 
  139.           { 
  140.             date: '2016-05-02'
  141.             name: '王小虎'
  142.             province: '上海'
  143.             city: '普陀区'
  144.             address: '上海市普陀区金沙江路 1518 弄'
  145.             zip: 200331 
  146.           }, { 
  147.             date: '2016-05-04'
  148.             name: '王小虎'
  149.             province: '上海'
  150.             city: '普陀区'
  151.             address: '上海市普陀区金沙江路 1517 弄'
  152.             zip: 200332 
  153.           }, { 
  154.             date: '2016-05-01'
  155.             name: '王小虎'
  156.             province: '上海'
  157.             city: '普陀区'
  158.             address: '上海市普陀区金沙江路 1519 弄'
  159.             zip: 200333 
  160.           }, { 
  161.             date: '2016-05-03'
  162.             name: '王小虎'
  163.             province: '上海'
  164.             city: '普陀区'
  165.             address: '上海市普陀区金沙江路 1516 弄'
  166.             zip: 200334 
  167.           }], 
  168.  
  169.         formLabelWidth: '120px'
  170.  
  171.         // 控制模态是否展示 
  172.         dialogFormVisible: false
  173.         form: { 
  174.           name: ''
  175.           dates: null
  176.         }, 
  177.  
  178.         // 对picker组件的扩展 
  179.         pickerOptions: { 
  180.           // 将之后的时间禁用 不然选择 
  181.           disabledDate(time) { 
  182.             return time.getTime() > Date.now(); 
  183.           }, 
  184.            
  185.           // 增加 今天 昨天 一周前的快速选项 
  186.           shortcuts: [{ 
  187.             text: '今天'
  188.             onClick(picker) { 
  189.               picker.$emit('pick'new Date()); 
  190.             } 
  191.           }, { 
  192.             text: '昨天'
  193.             onClick(picker) { 
  194.               const date = new Date(); 
  195.               date.setTime(date.getTime() - 3600 * 1000 * 24); 
  196.               picker.$emit('pick', date); 
  197.             } 
  198.           }, { 
  199.             text: '一周前'
  200.             onClick(picker) { 
  201.               const date = new Date(); 
  202.               date.setTime(date.getTime() - 3600 * 1000 * 24 * 7); 
  203.               picker.$emit('pick', date); 
  204.             } 
  205.           }] 
  206.         }, 
  207.  
  208.          
  209.         // 定义输入规则 
  210.         rules: { 
  211.           name: [ 
  212.               // 指定验证函数       触发时机。这个是失去焦点触发 
  213.             {validator: validatName, trigger: 'blur'
  214.           ], 
  215.         }, 
  216.       }; 
  217.     }, 
  218.  
  219.     methods: { 
  220.       onOk() { 
  221.          
  222.         // 使用ref进行验证 validate传入一个函数 返回一个验证是否成功的bool值 
  223.         this.$refs['ruleForm'].validate((valid) => { 
  224.           if (valid) { 
  225.  
  226.             const { 
  227.               name, 
  228.               dates 
  229.             } = this.form; 
  230.  
  231.           // 避免zip重复 zip++ 
  232.             const maxZip = Math.max(...this.tableData.map(item => item.zip)) + 1; 
  233.  
  234.             const obj = { 
  235.               name, 
  236.               date: dates, 
  237.               province: '北京'
  238.               city: '普陀区'
  239.               address: '上海市普陀区金沙江路 1518 弄'
  240.               zip: maxZip 
  241.             }; 
  242.  
  243.         // push到数据里面 
  244.             this.tableData.push(obj); 
  245.  
  246.         // 将模态隐藏 
  247.             this.dialogFormVisible = false
  248.           } else { 
  249.             return false
  250.           } 
  251.         }); 
  252.       }, 
  253.  
  254.       // 删除数据 
  255.       handleDelete(row) { 
  256.         this.tableData.map((item, index) => { 
  257.           if (item.zip === row.zip) { 
  258.             this.tableData.splice(index, 1); 
  259.           } 
  260.         }); 
  261.       }, 
  262.  
  263.       handleCreate() { 
  264.         // 模态展示 
  265.         this.dialogFormVisible = true
  266.       } 
  267.     } 
  268.   }; 
  269. </script> 

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

打包

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

?
1
2
3
4
5
6
/**
 * Created By 憧憬
 */
module.exports = {
  publicPath: './'    // 静态资源目录配置为./ 当前目录
};

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

原文链接:https://aoppp.com/vue-shi-yongelement-shi-xian-zeng-shan-g/