第六十四篇:写一个多功能表格

好家伙,结合前面的内容,实践一下

 

好了,现在要结合前面学的知识写一个小案例

我想这是一个列表

 

产品需求:

1.有id,姓名,是否启用,时间,这四个属性的显示(v-model,{{}}插值表达式,v-if,v-else,v-for)

2.有删除功能(v-model,v-on,filter)

3.有添加功能(v-model,push,this)

 

好了,开搞

 

1.属性显示

大概的模板先搞出来

<body>   
    <div id="app">
        <div>
            <p>进行属性添加</p>
            <form action="">
                <div>                   
                    <input type="text">
                    <button>提交</button>
                </div>
            </form>
        </div>
       <table>
           <thead>
               <th>id</th>
               <th>品牌</th>
               <th>是否禁用</th>
               <th>时间</th>
           </thead>
           <tbody>
               <tr v-for="item in list" :key="item.id" >
               <td>{{ item.id }}</td>
               <td>{{ item.name }}</td>
                <td>
                    <div>
                        <input type="checkbox" id="sustomSwitch1" v-model="item.status">
                        <label for="coutomSwitch1" v-if="item.status">已启用</label>
                        <label for="coutomSwitch1" v-else>已禁用</label>
                    </div>
                </td>
                <td>{{ item.time }}</td>
               </tr>
           </tbody>
       </table>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

    <script>
     
        const vm = new Vue({
            
            el:'#app',
           
            data:{
                list:[
                    { id:1,name:'宝马',status:true,time: new Date() },
                    { id:2,name:'奔驰',status:true,time: new Date() },
                    { id:3,name:'奥迪',status:true,time: new Date() },
                ],            
            },
            methods:{                              
             }           
        })
    </script>
</body>

页面显示如下:

 是丑了点,

 

"是否禁用"这一项要拿出来说一下:

<div>
     <input type="checkbox" id="sustomSwitch1" v-model="item.status">
     <label for="coutomSwitch1" v-if="item.status">已启用</label>
     <label for="coutomSwitch1" v-else>已禁用</label>
</div>

注释:"for" 属性可把 label 绑定到另外一个元素。请把 "for" 属性的值设置为相关元素的 id 属性的值。

这里我们让两个<label>标签都为前面的<input>服务

<input>是"checkbox"类型的,所以可以用"item.status"控制真假

随后用v-model进行绑定,配合 "v-if" 和 "v-else" 就可以进行禁用状态和启用状态的切换,

 

2.添加删除功能

<body>   
    <div id="app">
        <div>
            <p>进行属性添加</p>
            <form action="">
                <div>                   
                    <input type="text">
                    <button>提交</button>
                </div>
            </form>
        </div>
       <table>
           <thead>
               <th>id</th>
               <th>品牌</th>
               <th>是否禁用</th>
               <th>时间</th>
           </thead>
           <tbody>
               <tr v-for="item in list" :key="item.id" >
               <td>{{ item.id }}</td>
               <td>{{ item.name }}</td>
                <td>
                    <div>
                        <input type="checkbox" id="sustomSwitch1" v-model="item.status">
                        <label for="coutomSwitch1" v-if="item.status">已启用</label>
                        <label for="coutomSwitch1" v-else>已禁用</label>
                    </div>
                </td>
                <td>{{ item.time }}</td>
                <td>
                    <a href="javascript:;" @click="remove(item.id)">删除</a>//href="javascript:;"表示什么都不执行
                </td>
               </tr>
               
           </tbody>
       </table>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

    <script>
     
        const vm = new Vue({
            
            el:'#app',
           
            data:{
                list:[
                    { id:1,name:'宝马',status:true,time: new Date() },
                    { id:2,name:'奔驰',status:true,time: new Date() },
                    { id:3,name:'奥迪',status:true,time: new Date() },
                ],            
            },
            methods:{    
                remove(id){
                    this.list=this.list.filter(item=>item.id!==id)
                    //当前id不等于要删的id,把item项过滤出来,放回到数组里面去,
                    //数组变空,变相实现了删除的功能
                }                          
             }           
        })
    </script>
</body>

为删除绑定一个remove方法,随后使用过滤器将其"删除"

 

没毛病:

 

搞定!

 

3.实现添加功能

好家伙,这个还挺难的

 

"添加"功能的核心业务:

往list的尾部添加数据!

 

步骤:

1.把要添加的品牌对象整理出来

2.把这个对象往list数组中push

 

好了,最终版本出来了

<body>   
    <div id="app">
        <div>
            <p>进行属性添加</p>
            <form @submit.prevent="add">
                <div>                   
                    <input type="text" placeholder="请输入品牌" v-model.trim="brand"> //.trim用于去除前后空格
                    <button type="submit">提交</button>
                </div>
            </form>
        </div>
       <table>
           <thead>
               <th>id</th>
               <th>品牌</th>
               <th>是否禁用</th>
               <th>时间</th>
           </thead>
           <tbody>
               <tr v-for="item in list" :key="item.id" >
               <td>{{ item.id }}</td>
               <td>{{ item.name }}</td>
                <td>
                    <div>
                        <input type="checkbox" id="sustomSwitch1" v-model="item.status">
                        <label for="coutomSwitch1" v-if="item.status">已启用</label>
                        <label for="coutomSwitch1" v-else>已禁用</label>
                    </div>
                </td>
                <td>{{ item.time }}</td>
                <td>
                    <a href="javascript:;" @click="remove(item.id)">删除</a>
                </td>
               </tr>
               
           </tbody>
       </table>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

    <script>
     
        const vm = new Vue({
            
            el:'#app',
           
            data:{
                brand:'',
                //输入品牌名称
                nextId:4,
                //此为下一个可用的id

                list:[
                    { id:1,name:'宝马',status:true,time: new Date() },
                    { id:2,name:'奔驰',status:true,time: new Date() },
                    { id:3,name:'奥迪',status:true,time: new Date() },
                ],            
            },
            methods:{    
                remove(id){
                    this.list=this.list.filter(item=>item.id!==id)
                    //当前id不等于要删的id,把item项过滤出来,放到新数组里面去,
                    //数组变空,变相实现了删除的功能
                },        
                add(){
                    console.log('成功')//测试

                    if(this.brand==='') return alert('必须填写品牌名称!')
                    //1.把要添加的品牌对象整理出来
                    const obj ={
                        id:this.nextId,
                        name:this.brand,
                        status:true,
                        time:new Date()
                    }
                    //2.往this.list数组中push步骤1中得到的对象
                    this.list.push(obj)
                    //3.清空this.brand;让this.nextId自增+1
                    this.brand =''
                    this.nextId++
                }                  
             }           
        })
    </script>
</body>

 

搞定

我们把前三项都删掉,再随意添加两项

来看看效果:

 

 

 搞定,

小细节,关于<form @submit.prevent="add">

<from>标签中使用.prevent修饰符取消刷新

 

 

不用element ui,实现这个感觉还挺有意思的,(难看是难看了点)

That's all

 

posted @ 2022-04-08 23:09  养肥胖虎  阅读(42)  评论(0编辑  收藏  举报