vue2 实现表格添加和删除

表格添加与删除

效果图
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <style>
        #app{
            margin: 0 auto;

        }
        button{
            cursor: pointer;
        }
        .input{
            width: 300px;
            text-align: right; 
            line-height: 30px;
        }
        .input button{
            width: 100px;
        }
    </style>
</head>
<body>
    <div id="app">
        <div class="input">
            编号:<input type="text" v-model="num"> <br>
            商品名称:<input type="text" v-model="car"><br>
            <button @click="add()">添加</button>
        </div>
        <table border="1">
            <thead>
                <tr>
                    <th>编号</th>
                    <th>品牌名称</th>
                    <th>创建时间</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr v-for="(item,index) in list" :key="item.id">
                    <td>{{item.number}}</td>
                    <td>{{item.title}}</td>
                    <td>{{item.time}}</td>
                    <td><button @click="del(item.id)">删除</button></td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
<script>
    var vm=new Vue({
        el:'#app',
        data() {
            return {
                num:"",
                car:"",
                list:[
                    {
                        id:1,
                        number:1,
                        title:"坦克300",
                        time:"2023/2/10 10:37:00"
                    }
                ]
            }
        },
        methods: {

            add(){
                if(this.num&&this.car){
                    let obj={
                        // 商品名称
                        title:this.car,
                        // 商品变哈哈
                        number:this.num,
                        // 创建时间
                        time:new Date().toLocaleString(),
                        // 创建的id 通过数据里的下标的id+1 创建下一个id值
                        id:this.list.length==0?1:this.list[this.list.length-1].id+1
                    }
                    // unshift在前面添加
                    // push在后面添加
                    this.list.unshift(obj)
                    // 添加完之后 将输入框的内容清空
                    this.num="",
                    this.car=""
                }
            },
            del(id){
                confirm("确定删除此项内容吗?")
                if(confirm==true){
                    // 如果点击的id与数据list里的id值相等删除
                    // return 是返回的条件
                  this.list=this.list.filter((item)=>{
                    return item.id!=id
                })   
                }
               
            }
        },
    })
</script>
</html>
Vue.js实现表格的增删功能,通常会结合Vuex(状态管理库)来管理和同步数据,以及事件监听和指令来操作DOM。以下是基本步骤: 1. **数据模型**: 创建一个数组,在Vuex store中存储表格的数据。例如: ```javascript state: { tableData: [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' } ] } ``` 2. **模板渲染**: 使用`v-for`遍历数据,并提供添加删除按钮: ```html <table> <tr v-for="(item, index) in $store.state.tableData"> <!-- ... item内容 --> <td><button @click="deleteRow(index)">删除</button></td> </tr> <tr> <td><input type="text" v-model="$store.state.newRow.name" @keyup.enter="addRow"></td> <td><button @click="addRow">添加</button></td> </tr> </table> ``` 3. **方法实现**: - `deleteRow(index)`:从`tableData`中移除对应索引的项,并更新store状态。 - `addRow()`:将新的行添加到`tableData`数组末尾,然后清除新行输入框的内容。 4. **Vuex操作**: - 更新`deleteRow`方法需要通过`this.$store.dispatch('deleteRow', index)`来触发动作并更新state。 - 对于`addRow`,可以直接修改state,因为一般不需要通知所有组件,但在大规模应用中可能需要创建一个新的mutation。 5. **事件监听和指令**: 如果有其他组件需要响应表的变化,可以使用Vue的`@update:tableData`监听器,或者自定义事件系统如Event Bus。 ```javascript // 示例中的actions和mutations可能长这样 actions: { deleteRow({ commit }, index) { this.$store.dispatch('removeItem', index); }, addRow({ commit }) { commit('addItem', { name: '' }); } }, mutations: { addItem(state, newItem) { state.tableData.push(newItem); }, removeItem(state, index) { state.tableData.splice(index, 1); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值