element-ui与Vue的使用:创建一个table表格的增删改。

element-ui与Vue的使用:创建一个table表格的增删改。

这几天都在学习element,现在把我学习到的东西分享给大家:

首先介绍一下element,这是一款专门给前端程序员设计的,而layui可以说是专门给后端程序员设计的。
其次就是关于element的使用,这其实很简单,只要把自己想要的东西拷贝进来就可以了,直接用上。

一、我刚刚开始学习的时候,就被弹框困扰了,我一直以为在js里面写弹框,后来才发现并不是,我们可以用v-if或者v-show来控制弹框的显示,我承认我太年轻了,那我们先上弹框的代码

首先我们先定义一个变量来控制弹框,记住要定义在data里面,先设置为false;

   dialogVisible: false,

然后我们在用按钮去改变他的值,就像这样:

 <el-button type="primary" @click.native="dialogVisible=!dialogVisible">新增</el-button>

这样我们点击一次就把dialogVisible的值变成true,再点击一次又变成false了;
然后我们就用dialogVisible去控制弹框的显示,如下:

// An highlighted block
 <el-dialog title="新增" :visible.sync="dialogVisible" width="33.6%" :before-close="handleClose">
      <el-form label-position='left' :inline="true" :model="editObj" class="demo-form-inline">
        <el-form-item label="名称">
          <el-input v-model="editObj.name"></el-input>
        </el-form-item>
        <el-form-item label="编码">
          <el-input v-model.number="editObj.id"></el-input>
        </el-form-item>
      </el-form>
      <el-form label-position='left' ref="form" :model="editObj" label-width="40px">
        <el-form-item label="说明" prop="desc">
          <el-input type="textarea" v-model="editObj.instructions"></el-input>
        </el-form-item>
        <el-form-item label="示例" prop="desc">
          <el-input type="textarea" v-model="editObj.case"></el-input>
        </el-form-item>
      </el-form>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="add">保 存</el-button>
      </span>
    </el-dialog>

这样就可以显示弹框啦,对了直接复制代码会报错哦,我们要定义一下我们的函数,还有data的值哦!!!
上方我们要在data定义一下editObj;

 editObj: {
          id: '',
          name: '',
          instructions: '',
          case: '',
        },

这样定义就好啦。
一定会有人问为什么弹框上面的×点击为什么弹框没有反应呢?
这是因为我们还没有写方法呀!我们后面会说的,和修改数据弹框一起说!
然后我们就来新增数据啦,把弹框的form表单存到我们的数据中,当然,我们在上传的时候,要检验一下表单是否为空对吧!我这边只检测了第一项、第二项、第三项并且还加一个,就是检验id是否为数字,我是这样写的,

 add() {//增加数据
          if (!this.editObj.name) {
            this.$message({
              message: '请输入姓名',
              type: 'warning'
            });
            return;
          }
          if (!this.editObj.id) {
            this.$message({
              message: '请输入编码',
              type: 'warning'
            });
            return;
          }
          if (/[^\d]/g.test(this.editObj.id)) {
            this.$message({
              message: '编码只能为数字,请输入正确的编码',
              type: 'warning'
            });
            return;
          }
          if (!this.editObj.instructions) {
            this.$message({
              message: '请输入说明',
              type: 'warning'
            });
            return;
          }
          var car = { id: this.editObj.id, name: this.editObj.name, instructions: this.editObj.instructions, case: this.editObj.case }
          this.$confirm('确认是否要新增?')
            .then(_ => {
              this.list.push(car)
              this.editObj = {
                id: '',
                name: '',
                instructions: '',
                case: '',
              }
              this.dialogVisible = !this.dialogVisible

            })
            .catch(_ => { });

        },

接下来我们就讲修改数据和删除数据啦!
一样的,首先我们先要用一个变量控制弹框是否出现!
也是在data里面哦;

changeObj: false,

再次我们也要写个按钮控制这个变量的变化,这笔我写了2个,因为我这边的删除键和修改是在每一个数组对象的后面,我点击了修改后才会出现在每一个数组后面

 <el-button type="primary" @click.native="changeObj = !changeObj">修改</el-button>
 <el-button type="primary" @click.native="this.seen = !this.seen">删除</elbutton>

<el-table :data="list" style="width: 100%">
      <el-table-column prop="name" label="名称" width="180">
      </el-table-column>
      <el-table-column prop="id" label="编码" width="180">
      </el-table-column>
      <el-table-column prop="instructions" label="说明">
      </el-table-column>
      <el-table-column prop="case" label="示例">
      </el-table-column>
      <!-- <el-table-column v-model="id" v-if="seen" label="操作"><a v-model="id" href=""
          @click.prevent="del(scope.$index, tableData)">删除</a>
      </el-table-column> -->
      </el-table-column>
      <!-- 修改按钮是否显示 -->
      <el-table-column v-if="changeObj" fixed="right" label="操作" width="120">
        <template slot-scope="scope">
          <el-button @click.native.prevent="editUser(scope.row,scope.$index)" type="text" size="small">
            修改
          </el-button>
        </template>
      </el-table-column>
      <!-- 删除按钮是否显示 -->
      <el-table-column v-if="seen" fixed="right" label="操作" width="120">
        <template slot-scope="scope">
          <el-button @click.native.prevent="deleteRow(scope.$index, list)" type="text" size="small">
            删除
          </el-button>
        </template>
      </el-table-column>
    </el-table>

再来就是弹框了

<el-dialog title="修改" :visible.sync="changeObj1" width="32.6%" :before-close="handleClose">
      <el-form label-position='left' :inline="true" :model="editObj" class="demo-form-inline">
        <el-form-item label="名称">
          <el-input v-model="editObj1.name"></el-input>
        </el-form-item>
        <el-form-item label="编码">
          <el-input :disabled="true" v-model="editObj1.id"></el-input>
        </el-form-item>
      </el-form>
      <el-form ref="form" label-position='left' :model="editObj" label-width="40px">
        <el-form-item label="说明" prop="desc">
          <el-input type="textarea" v-model="editObj1.instructions"></el-input>
        </el-form-item>
        <el-form-item label="示例" prop="desc">
          <el-input type="textarea" v-model="editObj1.case"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="changeObj1 = false">取 消</el-button>
        <el-button type="primary" @click="change">保 存</el-button>
      </span>
    </el-dialog>

和上面新增一样我们也是要定义方法和data里面的值的!
下面我们说一下方法:


        deleteRow(index, rows) {//数据删除
          this.$confirm('确认是否要删除?')
            .then(_ => {
              rows.splice(index, 1);
            })
            .catch(_ => { });
        },
        editUser(item, idx) {//修改数据的数据显示
          this.changeObj1 = true;
          this.suerIndex = idx;
          this.editObj1 = {
            id: item.id,
            name: item.name,
            instructions: item.instructions,
            case: item.case,
          }
        },
        change() {//数据修改
          if (!this.editObj1.name) {
            this.$message({
              message: '请输入姓名',
              type: 'warning'
            });
            return;
          }
          if (!this.editObj1.instructions) {
            this.$message({
              message: '请输入说明',
              type: 'warning'
            });
            return;
          }
          this.$confirm('确认是否要修改?')
            .then(_ => {
              Vue.set(this.list, this.suerIndex, this.editObj1)
              this.changeObj1 = false
            })
            .catch(_ => {

            });
        },

我们删除数据就是直接删除,修改的话,我们就像让数据先显示弹框中,而且我们的编码,就是id不能够修改!修改后我们还要判断一下是否为空,和上面新增是一样的形式!
这边还有一个就是弹窗点×关闭:
这个方法很简单,直接这样定义就好了:

   handleClose() {//弹框关闭
          this.dialogVisible = false;
          this.changeObj1 = false
        },

二、table表格的分页!

首先我们先去官网找一个分页,拷贝进来,再把数据改一下

<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
      :page-sizes="[10, 20, 50, 100]" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper"
      :total="list.length">
    </el-pagination>

total是数据的条数,我们直接改成我们数组的长度就行了
方法也有给我们:

 handleSizeChange(val) { //每页条数
          console.log(`每页 ${val} 条`);
          this.pagesize = val;
        },
        handleCurrentChange(val) { //跳转页码
          console.log(`当前页: ${val}`);
          this.currpage = val;
        },

当然这边我改了一下,这样可以绑定我的对象数组!
当然我们的循环也要改变一下了,毕竟我们也是有分页的人了;
改成这样:

<el-table :data="list.slice((currpage - 1)*pagesize, currpage * pagesize)" style="width: 100%">
      <!-- <el-table :data="list" style="width: 100%"> -->
      <el-table-column prop="name" label="名称" width="180">
      </el-table-column>
      <el-table-column prop="id" label="编码" width="180">
      </el-table-column>
      <el-table-column prop="instructions" label="说明">
      </el-table-column>
      <el-table-column prop="case" label="示例">
      </el-table-column>
      <!-- <el-table-column v-model="id" v-if="seen" label="操作"><a v-model="id" href=""
          @click.prevent="del(scope.$index, tableData)">删除</a>
      </el-table-column> -->
      </el-table-column>
      <!-- 修改按钮是否显示 -->
      <el-table-column v-if="changeObj" fixed="right" label="操作" width="120">
        <template slot-scope="scope">
          <el-button @click.native.prevent="editUser(scope.row,scope.$index)" type="text" size="small">
            修改
          </el-button>
        </template>
      </el-table-column>
      <!-- 删除按钮是否显示 -->
      <el-table-column v-if="seen" fixed="right" label="操作" width="120">
        <template slot-scope="scope">
          <el-button @click.native.prevent="deleteRow(scope.$index, list)" type="text" size="small">
            删除
          </el-button>
        </template>
      </el-table-column>
    </el-table>

我这样写完之后我发现了一个问题!
就是说我改第二页的第二个数据变成了改第一页第二个数据了,这说明什么问题!这说明分完页之后,每一页的index都只会认得0-9,所以我们还要改进一下修改和删除的方法:

 deleteRow(index, rows) {//数据删除
          this.$confirm('确认是否要删除?')
            .then(_ => {
              rows.splice(index + ((this.currpage - 1) * this.pagesize), 1);
            })
            .catch(_ => { });
        },
        editUser(item, idx) {//修改数据的数据显示
          this.changeObj1 = true;
          this.suerIndex = idx + ((this.currpage - 1) * this.pagesize);
          this.editObj1 = {
            id: item.id,
            name: item.name,
            instructions: item.instructions,
            case: item.case,
          }
        },
        change() {//数据修改
          if (!this.editObj1.name) {
            this.$message({
              message: '请输入姓名',
              type: 'warning'
            });
            return;
          }
          if (!this.editObj1.instructions) {
            this.$message({
              message: '请输入说明',
              type: 'warning'
            });
            return;
          }
          this.$confirm('确认是否要修改?')
            .then(_ => {
              Vue.set(this.list, this.suerIndex, this.editObj1)
              this.changeObj1 = false
            })
            .catch(_ => {

            });
        },

这样就完成了,最后我也附上我的data数据:

 data: {
        seen: false, //删除按钮是否显示
        dialogVisible: false, //新增弹框是否显示
        changeObj: false, //修改按钮显示
        changeObj1: false, //修改弹窗显示
        suerIndex: 0, //修改数据的(index)
        currentPage: 1, //数据初始默认跳转页面
        pagesize: 10, //默认每页条数
        currpage: 1, //默认页码
        list: [ //模拟数据
          { id: 1, name: '宝马', instructions: '这是一个说明1', case: '这是案例1' },
          { id: 2, name: '法拉利', instructions: '这是一个说明2', case: '这是案例2' },
          { id: 3, name: '宝马', instructions: '这是一个说明1', case: '这是案例1' },
          { id: 4, name: '法拉利', instructions: '这是一个说明2', case: '这是案例2' },
          { id: 5, name: '宝马', instructions: '这是一个说明1', case: '这是案例1' },
          { id: 6, name: '法拉利', instructions: '这是一个说明2', case: '这是案例2' },
          { id: 7, name: '宝马', instructions: '这是一个说明1', case: '这是案例1' },
          { id: 8, name: '法拉利', instructions: '这是一个说明2', case: '这是案例2' },
          { id: 9, name: '法拉利', instructions: '这是一个说明2', case: '这是案例2' },
          { id: 10, name: '法拉利', instructions: '这是一个说明2', case: '这是案例2' },
          { id: 11, name: '法拉利', instructions: '这是一个说明2', case: '这是案例2' },
        ],
        editObj: {
          id: '',
          name: '',
          instructions: '',
          case: '',
        },
        editObj1: {
          id: '',
          name: '',
          instructions: '',
          case: '',
        }
      },

随便写的,不要喷我只写车!!!
到这里就做完啦!
感谢观看!有什么不对的地方欢迎指正!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用element-uivue.js写一段批量删除表格内容的代码: <template> <div> <el-button type="danger" @click="handleDelete">批量删除</el-button> <el-table :data="tableData" ref="multipleTable" :row-key="row => row.id" :show-header="true" :highlight-current-row="true" :default-sort="{prop: 'date', order: 'descending'}"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="date" label="日期" width="180"></el-table-column> <el-table-column prop="name" label="姓名" width="180"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData: [{ id: 1, date: '2022-01-01', name: '张三', address: '北京市朝阳区' }, { id: 2, date: '2022-01-02', name: '李四', address: '上海市浦东新区' }, { id: 3, date: '2022-01-03', name: '王五', address: '广州市天河区' }, { id: 4, date: '2022-01-04', name: '赵六', address: '深圳市南山区' }], multipleSelection: [] }; }, methods: { handleDelete() { if (this.multipleSelection.length === ) { this.$message({ message: '请选择要删除的数据', type: 'warning' }); return; } this.$confirm('确认删除选中的数据吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const ids = this.multipleSelection.map(item => item.id); this.tableData = this.tableData.filter(item => !ids.includes(item.id)); this.multipleSelection = []; this.$message({ message: '删除成功', type: 'success' }); }).catch(() => {}); } } }; </script>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值