Vue实现todolist完整版(增加,删除,筛选)

这篇博客详细介绍了如何使用Vue.js实现一个完整的todolist应用,包括添加、删除任务和筛选功能。通过查看HTML、CSS和JS代码,读者可以学习到Vue组件的创建和事件处理等核心概念。

1.html 代码(需要下载Bootstrap)

 <div id="app">
        <div class="container ">
            <h3 class="text-center">todolist</h3>
            <ul class="list-group box">
                <li class="list-group-item">
                    <div class="input-group">
                        <input type="text" class="form-control" v-model="val">
                        <span class="input-group-btn">
                            <button class="btn btn-default" @click="add">添加</button>
                        </span>
                        
                    </div>
                </li>
                
                <li class="list-group-item text-center">
                    <div class="btn-group">
                        <button class="btn btn-default " :class="{'sel':actived=='all'}" @click="actived='all'">全部</button>
                        <button class="btn btn-default"  :class="{'sel':actived=='no'}" @click="actived='no'">未完成</button>
                        <button class="btn btn-default"  :class="{'sel':actived=='yes'}" @click="actived='yes'">完成</button>
                    </div>
                </li>
                
                <li class="list-group-item ">
                    <ul class="list-group">
                        <li class="list-group-item list-item" v-for="(item,index) in showList" :key="item.id">
                            <span :class="{'select':item.finished}" @click="item.finished=!item.finished">{{item.title}}</span>
                            <button class="btn btn-default" @click="del(index)">删除</button>
                        </li>
                        <li class="list-group-item text-center else" v-show="showList.length==0">
                            暂无内容
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>

 2.css

<style>
        .box{
            width: 320px;
            margin: 0 auto;
        }
        .btn-default.sel{
            background-color: cornflowerblue;
        }
        .list-item{
            display: flex;
            justify-content: space-between;
        }
        .list-item span{
            display: flex;
            align-items: center;
        }

        .list-group{
            margin-bottom: 0;
        }
        .list-group-item.else{
            border:none
        }
        .select{
            text-decoration: line-through;
        }
    </style>

3.js代码

 <script>
        let vm=new Vue({
            el:"#app",
            data:{
                val:'',
                list:[],
                actived:'all',
                showList:[]
                
            },
           
            methods: {
                add(){
                    this.list.unshift({
                        id:new Date().getTime(),
                        title:this.val,
                        finished:false
                    });

                    this.val=""
                },

                del(index){
                    this.list.splice(index,1)
                }
            },
            watch:{
                actived(value){
                    console.log(value);
                    if(value=='all'){
                        this.showList=this.list
                    }else if(value=='no'){
                        this.showList=this.list.filter(item=>!item.finished)
                    }else{
                        this.showList=this.list.filter(item=>item.finished)
                    }
                },
                list:{
                    handler(value){
                        if(this.actived=='all'){
                            this.showList=value;
                        }else if(this.actived=='no'){
                            this.showList=this.list.filter(item=>!item.finished)
                        }else{
                            this.showList=this.list.filter(item=>item.finished)
                        }
                        
                    },
                    deep:true
                
                }
            }
        })
    </script>

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值