Vue.js实现可编辑的表格

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
    <style type="text/css">
         table tr td{
            text-align: center;
         }
        .btn-info{
            margin-left: 5px;
        }

        .add,.addBox{
            margin: 10px 0px 10px 10px;
        }
        .submit{
            margin-left: 172px;
        }
        /*全删*/
        .delAll{
            margin-left: 10px;
        }
        /*新增*/
        fieldset{
            margin-left: 10px;
        }
    </style>
</head>
<body>

<div id="app">
<button class="btn btn-primary btn-sm addBox" @click="addBox">添加</button>
<button class="btn btn-sm btn-danger delAll" @click="delAll">批量删除</button>
 <table class="table table-bordered" >
 <thead>
    <tr>
        <td><input type="checkbox" @click="allSelect"  v-model="checked"></td>
        <td>学号</td>
        <td>姓名</td>
        <td>年纪</td>
        <td>操作</td>

    </tr>
 </thead>
   <tbody>
     <tr v-for="person,index in people">
        <td><input type="checkbox" v-model="selected"  v-bind:value="person.sid"></td>
        <td @click="edit(index)" contenteditable="true">{{person.sid}}</td>
        <td @click="edit(index)" contenteditable="true">{{person.sname}}</td>
        <td @click="edit(index)" contenteditable="true">{{person.sage}}</td>
        <td><button @click="del(index)" class="btn btn-danger btn-sm">删除</button><button @click="update(index)" class="btn btn-info btn-sm">编辑</button></td>
     </tr>
   </tbody>

 </table>

<fieldset v-show="seen" >
    <legend>新增用户</legend>
    <div class="">
    <p>
        <label>学号:</label>
        <input type="text" v-model="newPeople.sid">
    </p>
    <p>
        <label>姓名:</label>
        <input type="text" v-model="newPeople.sname">
    </p>
    <p>
        <label>年龄:</label>
        <input type="number" v-model="newPeople.sage">
    </p>
    <p>
        <button class="btn btn-success btn-sm submit" @click="add">提交</button>
    </p>
</div>


</fieldset> 
<!-- 编辑界面 -->
<fieldset v-show="editSeen">
    <legend>编辑用户</legend>


<div class="">
    <p>
        <label>学号:</label>
        <input type="text" v-model="editPeople.sid" value="{{sid}}">
    </p>
    <p>
        <label>姓名:</label>
        <input type="text" v-model="editPeople.sname" value="{{sname}}">
    </p>
    <p>
        <label>年龄:</label>
        <input type="number" v-model="editPeople.sage" value="{{sage}}">
    </p>
    <p>
        <button class="btn btn-success btn-sm submit" @click="editSubmit">提交</button>
    </p>
</div>
</fieldset> 
</div>


  <script type="text/javascript" src="vue.min.js"></script>
  <script type="text/javascript">
  var data ={
                people:[  
                    {'sid':'1043','sname':'张三','sage':18},  
                    {'sid':'2434','sname':'赵六','sage':43},  
                    {'sid':'3424','sname':'李四','sage':42},  
                    {'sid':'1231','sname':'王五','sage':35}  
                ],
                newPeople:{
                    'sid':'','sname':'','sage':''
                },
                seen:false,
                editSeen:false,
                checked:false,
                selected:[],
                editPeople:{
                    'sid':'','sname':'','sage':''
                }

            } ;
     var app = new Vue({
        'el':'#app',
         data:data,

         methods:{
            // 添加
            addBox:function(){
                this.seen = this.seen == false ? true : false;
            },
            //删除
            del:function(index){
                console.log(11);
               this.people.splice(index,1);
            },
            //提交
            add:function(){
                    //插入到people中
                    this.people.push(this.newPeople);

                    this.newPeople = {};
                    this.seen = false
            },
            //全选
            allSelect:function(){
                if(this.selected.length != this.people.length){
                    this.selected = [];
                    for(var i = 0; i<this.people.length;i++){
                        this.selected.push(this.people[i].sid);
                        console.log(this.people[i].sid);

                    }

                }else{
                    this.selected = [];
                }

            },
            //批量删除
            delAll:function(){
                for(var j = 0; j< this.selected.length;j++){
                    for(var i = 0; i< this.people.length; i++){ 
                        if(this.selected[j] == this.people[i].sid){
                            this.people.splice(i,1);
                        }
                    }
                }

            },
             //编辑
             update:function(index){
                this.editSeen = true;
                 this.editPeople = this.people[index];



             },
             //编辑后提交
             editSubmit:function(){
                this.editSeen = false;

             }

         },
         watch:{
            "selected":function(){
                if(this.selected.length == this.people.length){
                    this.checked = true;
                }else{
                    this.checked = false;
                }
            }
         }
     })
  </script>
</body>
</html>

这里写图片描述

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
首先,我们可以使用Vue.js创建一个表格组件。然后,我们可以使用`v-for`指令来生成表格的行和列。每个单元格都可以绑定一个数据属性,以便我们可以在编辑时更新它们。 下面是一个简单的示例: ```html <template> <table> <thead> <tr> <th v-for="(header, index) in headers" :key="index">{{ header }}</th> </tr> </thead> <tbody> <tr v-for="(row, rowIndex) in rows" :key="rowIndex"> <td v-for="(cell, cellIndex) in row" :key="cellIndex"> <span v-if="!editing[rowIndex] || editing[rowIndex][cellIndex] !== true">{{ cell }}</span> <input v-else type="text" v-model="rows[rowIndex][cellIndex]" @blur="save(rowIndex, cellIndex)"> </td> </tr> </tbody> </table> </template> <script> export default { props: { headers: Array, rows: Array }, data() { return { editing: [] }; }, methods: { edit(rowIndex, cellIndex) { if (!this.editing[rowIndex]) { this.editing[rowIndex] = []; } this.editing[rowIndex][cellIndex] = true; }, save(rowIndex, cellIndex) { this.editing[rowIndex][cellIndex] = false; } } }; </script> ``` 在这个例子中,我们传递了一个`headers`数组和一个`rows`数组作为props,它们分别表示表格的表头和内容。我们使用`v-for`指令来遍历这些数组并生成表格的行和列。 每个单元格都有一个`editing`数组,用于跟踪哪些单元格正在编辑。当用户单击一个单元格时,我们将其标记为正在编辑,并将其内容替换为一个输入框。当用户完成编辑并失去焦点时,我们将其内容保存回到数据中,并将其标记为非编辑状态。 这个示例只是一个基本的实现,你可以根据自己的需求对其进行调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值