VUE小案例---todolist

这篇博客详细介绍了使用Vue.js开发TodoList应用的过程,包括模块拆分、静态页面搭建、动态组件的实现,如动态显示数据、子组件与父组件间的通信,以及全选删除功能。此外,还强调了组件化编码的重要性,如组件按功能拆分和状态提升。
摘要由CSDN通过智能技术生成

1. 模块拆分

在这里插入图片描述

2.静态页面搭建

2.1.案例目录

在这里插入图片描述

2.2.主页 index.html

在这里插入图片描述

2.3.main.js

在这里插入图片描述

2.4.App.vue

在这里插入图片描述

2.5.MyHeader.vue

在这里插入图片描述

2.6.MyList.vue

在这里插入图片描述

2.7.MyItem.vue

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

2.8.MyFooter.vue

在这里插入图片描述

2.9.静态页面效果展示

在这里插入图片描述

3.动态组件

3.1动态显示初始化数据

3.1.1 MyList.vue

定义数据:数组 todos {title, done}数组是存储要做的事的量,对象存储要做的事。
接收数据,v-for遍历数组

<template>
  <ul class="todo-main">
    <MyItem v-for="todoObj in todos" :key="todoObj.id" :todo="todoObj"/>
  </ul>
</template>
<script>
    import MyItem from './MyItem.vue'
    export default {
   
      name: 'MyList',
      components: {
   MyItem},
      data(){
   
        return{
   
          todos:[
              {
   id:'001',title:'drinking',done:true},
              {
   id:'002',title:'smoking',done:true},
              {
   id:'003',title:'driving',done:true}
          ]
        }
      }
    }
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>

3.1.2 MyItem.vue

得到数据,已完成事项可选

<template>
     <li>
      <label>
         <input type="checkbox" :checked="todo.done"/        <span>{
   {
   todo.title}}</span>
      </label>
      <button class="btn btn-danger" style="display:none">删除</button>
    </li>
</template>
<script>
    export default {
   
      name: 'MyItem',
      //声明接受todo对象
      props:['todo']
    }
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>...


3.1.3 效果展示

在这里插入图片描述

3.2动态交互

3.2.1实现子组件向父组件传数据

基本实现方法:在父组件先写一个接受函数,再把这个接受函数传给子组件,子组件利用这个函数接收数据,从而实现传递。

3.2.1.1父组件:App
<template>
  <div id="root">
    <div class="todo-container">
        <div class="todo-wrap">
          <MyHeader : addTodo="addTodo"/>
          <MyList :todos="todos" />
          <MyFooter />
      </div>
  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以参考以下代码实现一个简单的 Vue TodoList: ``` <template> <div class="todo-list"> <h1>Vue TodoList</h1> <form @submit.prevent="addItem"> <input type="text" v-model="newItem" placeholder="Add item..."> <button type="submit">Add</button> </form> <ul> <li v-for="(item, index) in items" :key="index"> <span>{{ item }}</span> <button @click="deleteItem(index)">Delete</button> </li> </ul> </div> </template> <script> export default { data() { return { newItem: '', items: [] } }, methods: { addItem() { if (this.newItem !== '') { this.items.push(this.newItem); this.newItem = ''; } }, deleteItem(index) { this.items.splice(index, 1); } } } </script> <style> .todo-list { margin: 0 auto; max-width: 600px; } ul { list-style: none; margin: 0; padding: 0; } li { display: flex; justify-content: space-between; align-items: center; margin: 10px 0; padding: 10px; border: 1px solid #ccc; border-radius: 5px; } button { background-color: #f44336; color: #fff; border: none; border-radius: 5px; padding: 5px 10px; cursor: pointer; } button:hover { background-color: #d32f2f; } input[type="text"] { padding: 10px; border-radius: 5px; border: 1px solid #ccc; margin-right: 10px; font-size: 16px; } </style> ``` 在这个 TodoList 中,我们使用了 `v-model` 指令绑定 `newItem` 变量,通过 `addItem` 方法向 `items` 数组中添加新的项目,并使用 `v-for` 指令渲染出每个项目。同时,在每个项目中,我们添加了一个 `Delete` 按钮,用于删除对应的项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值