我的前端学习笔记

90 阅读1分钟
学习内容:VUE2 TODOLIS案例添加功能

今天我学习了TODOLIS案例的添加功能,因为没有学习过全局事件总线,订阅消息,Vuex等知识,所以这里我使用基础的方法来实现TODOLIS案例的添加功能。

QQ图片20220524202729.jpg

初始化的数据内容todos:[...]原本是存放在List组件当中,添加内容的功能是由Header组件实现的,但是Header组件并不能将想添加的内容存放到List组件之中。(Header和List为兄弟组件) 因此,我将数据内容todos:[...]放到App组件中,利用v-bind语法将todos:[...]绑定在List组件标签中,在List子组件配置props配置项,以接收数据。

现在,我们就需要实现将我们想添加的内容放置到数据todos:[...]当中。我们从上图可以看到,要想实现将Header组件的东西,添加到App组件当中,需要有一条APP到Header虚线

这里的虚线我们在App组件中配置一个方法来实现。我们将方法绑定到Header组件标签,在Header子组件中配置props配置项。接着调用这个方法,将想要添加的内容newtodo作为参数传入到App中的方法上,App接收到参数,并将参数(添加的内容)放入数据todos:[...]中即可。

App组件代码块:
<template>
  <div id="root">
  <div class="todo-container">
    <div class="todo-wrap">
        <MyHeader :addTodo="addTodo"></MyHeader>
        <MyList :todos="todos"></MyList>
        <Myfooter></Myfooter>
    </div>
  </div>
</div>
</template>

<script>
import MyHeader from './components/MyHeader'
import MyList from './components/MyList'
import Myfooter from './components/Myfooter'

export default {
    name:"App",
    components:{
        MyHeader,
        MyList,
        Myfooter
    },
    data() {
        return {
            todos:[
                {id:"001",content:"操作系统40分钟",complate:false},
                {id:"002",content:"Vue40分钟",complate:true},
                {id:"003",content:"计算机网络40分钟",complate:false},
                {id:"004",content:"数据库40分钟",complate:true},
            ]
        }
    },
    methods:{
      addTodo(id){
        console.log("我是App组件,我收到了",id);
        this.todos.unshift(id)
      }
    }
}
</script>


Header代码块:
<template>
   <div class="todo-header">
        <input type="text" placeholder="请输入你的任务名称,按回车键确认" @keyup.enter="add" v-model="content" />
    </div>
</template>

<script>
import {nanoid} from "nanoid";
export default {
    name:"MyHeader",
    methods:{
        add(){
            if(!this.content.trim()) 
            return alert("输入不能为空");
            const newtodo={
                id:nanoid(),
                content:this.content,
                complate:false
            };
            this.addTodo(newtodo);
            this.content='';
        }
    },
    data() {
        return {
            content:""
        }
    },
    props:["addTodo"]
}
</script>

List代码块:
<template>
    <ul class="todo-main">
        <MyItem v-for="todoobj in todos" :key="todoobj.id" :todomsg="todoobj"></MyItem>
        
    </ul>
</template>

<script>
import MyItem from './MyItem.vue'

export default {
    name:"MyList",
    components:{
        MyItem
    },
    props:["todos"]
    
}
</script>