vue案例之bugList

本文介绍了如何在Vue应用中实现bug管理功能,包括动态列表的展示、bug对象的保存、状态修改、删除操作以及全选/取消全选的实现,重点强调了组件间的通信和响应式API的使用。
摘要由CSDN通过智能技术生成

案例示意图:
在这里插入图片描述

一、动态列表

二、保存bug

1、创建bug对象
2、添加到bugList数组中
3、清空文本域
注意:

  • 不能在子组件中修改父组件传来的对象,从父组件中传方法
  • 描述不能为空
  • 添加数组得用响应式api unshift()

代码实现:

  • bugHeader.vue
<template>
    <div class="header">
        <textarea cols="105" rows="4" placeholder="请输入BUG的描述信息" v-model="desc"></textarea>
        <br>
        <button class="small green button" @click="saveBug">保存</button>
    </div>
</template>

<script>
    export default {
        data(){
            return {
                desc:''
            }
        },
        props:['saveBugCallback'],
        methods:{
            saveBug(){
                //desc不能为空
                if(!this.desc.trim()) return;
                let bug={id:Date.now() ,desc:this.desc,resolved:false}
                //添加数组
                this.saveBugCallback(bug)
                console.info(this.desc.trim())
                //清空desc
                this.desc=''
            }
        }
    }
</script>

<style scoped>
     /* header */
     .header {
            margin-bottom: 20px;
            margin-top: 20px;
        }
</style>
  • app.vue
<template>
  <div class="app">
    <bugHeader :saveBugCallback="saveBugCallback"></bugHeader>
    <bugList :bugList="bugList"></bugList>
    <bugFooter></bugFooter>
  </div>
  
</template>
。。。。。。。。。。。。。。。。。。。。。
 methods:{
      saveBugCallback(bug){
        //响应式添加数组
        this.bugList.unshift(bug)
      }
    }

三、修改bug状态

  • app.vue
//修改bug状态
      modifyResolvedCallback(bug){
        this.bugList.forEach(element => {
          if(element.id==bug.id){
            element.resolved=!element.resolved
          } 
        });
      }

item中调用modifyResolvedCallback(bug)方法即可

四、删除bug

根据id删除对应的bug

五、全选和取消全选

思路:点击全选调用函数先获取复选框的checked,再遍历bugList数组,设置resolved=checked即可
获取复选框checked:<input type="checkbox" @click="allSelect($event)" ref="c1">
传递一个事件对象,并通过事件对象的target获取checked的值,再传递给 allSelectCallback

allSelect(e){
            let flag=e.target.checked;
            this.allSelectCallback(flag)
}

//app.vue中写
//全选与取消全选
      allSelectCallback(flag){
        this.bugList.forEach(bug=>{bug.resolved=flag})
      },

注意:难点在于全部选中bug,全选框自动选中和全选框选中后取消某一个bug。这里的解决方法是,每次选完bug后遍历数组,如果全部的resolved都等于true则全选选中,否则全选取消。

  1. item.vue
modifyResolved(bug){
                this.modifyResolvedCallback(bug)
                this.checkAllSelectCallback();
            },

2.app.vue

//检查是否全选
      checkAllSelectCallback(){
        let n=false;
        this.bugList.forEach(bug=>{
          if(!bug.resolved) {
            n=true;
            return;
            }
        })
        
        this.flag=n==true?false:true
      }
    }
  1. bugList.vue
watch:{
            //监听flag变化,保持checked与flag一致
            flag(){
                console.info("watch:flag="+this.flag)
                //获取html的doc元素
                this.$refs.c1.checked=this.flag
            }
        }

六、重要知识点

  1. 通过ref获取html中doc元素的属性
//标记ref
<input type="checkbox" @click="allSelect($event)" ref="c1">
//获取html的doc元素
this.$refs.c1.checked=this.flag
  1. 通过事件对象获取doc对象的属性值
<input type="checkbox" @click="allSelect($event)" ref="c1">
let flag=event.target.checked;
  1. 指针变小手
.desc{
        cursor: pointer;
     }
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜里都傻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值