美文网首页
案例-记事本组件拆分

案例-记事本组件拆分

作者: 家乡的蝈蝈 | 来源:发表于2024-03-28 11:08 被阅读0次

1. 拆分基础组件

<template>
  <!-- 主体区域 -->
  <section id="app">
    <!-- 输入框 -->
    <TodoHeader ></TodoHeader>
    <!-- 列表框 -->
    <TodoMain ></TodoMain>
    <!-- 统计和清空 -->
    <TodoFooter></TodoFooter>
  </section>
</template>
<script>
import TodoHeader from './components/TodoHeader.vue'
import TodoMain from './components/TodoMain.vue'
import TodoFooter from './components/TodoFooter.vue'
export default {
  data() {
    return {
    }
  },
  components: {
    TodoHeader,
    TodoMain,
    TodoFooter,
  },
}
</script>

2. 渲染代办任务

思路分析:

  1. 提供数据:提供在公共的父组件 App.vue
  2. 通过父传子,将数据传递给TodoMain
  3. 利用v-for进行渲染
<!-- 列表框 -->
<TodoMain :list="list"></TodoMain>
data() {
  return {
    list:[
      {id:1,name:"吃饭"},
      {id:2,name:"睡觉"},
      {id:3,name:"打豆豆"},

    ]
  }
},
<!-- 列表区域 -->
<section class="main">
  <ul class="todo-list">
    <li class="todo" v-for="(item, index) in list" :key="item.id">
      <div class="view">
        <span class="index">{{index + 1}}.</span>
        <label>{{item.name}}</label>
        <button class="destroy"></button>
      </div>
    </li>
  </ul>
</section>
<script>
export default {
  props: ['list']
}
</script>

3. 删除功能

思路分析:

  1. 监听时间(监听删除的点击)携带id
  2. 子传父,将删除的id传递给父组件App.vue
  3. 进行删除 filter (自己的数据自己负责)
<button class="destroy" @click="$emit('del', item.id)"></button>

<!-- 列表框 -->
<TodoMain :list="list" @del="handleDel"></TodoMain>
handleDel(id) {
  this.list = this.list.filter(item => item.id !== id)
}

4. 添加功能

思路分析:

  1. 收集表单数据 v-model
  2. 监听时间 (回车+点击 都要进行添加)
  3. 子传父,将任务名称传递给父组件App.vue
  4. 父组件接受到数据后 进行添加 unshift(自己的数据自己负责)
<button class="add" @click="post">添加任务</button>
methods: {
  post() {
    // $emit写到js区,要用this.$emit();this.todoname
    this.$emit('add', this.todoname) // 子传父语法
    this.todoname = '' // 清空输入框
  }
}

<!-- 输入框 -->
<TodoHeader @add="handleAdd"></TodoHeader>
methods: {
  handleAdd(todoname) {
    this.list.unshift({ id: Date.now(), name: todoname })
  }
}

5. 合计和清空

思路分析:

  1. 底部合计:父组件传递list到底部组件 —>展示合计
<!-- 统计和清空 -->
<TodoFooter :list="list" @clear="list = []"></TodoFooter>

<script>
export default {
  props:['list'],
}
</script>
<!-- 统计 -->
<span class="todo-count">合 计:<strong> {{list.length}} </strong></span>
  1. 清空功能:监听事件 —> 子组件通知父组件 —>父组件清空
<!-- 清空 -->
<button class="clear-completed" @click="$emit('clear')">清空任务</button>

<!-- 统计和清空 -->
<TodoFooter :list="list" @clear="list = []"></TodoFooter>

5. 持久化存储

思路分析:

  1. 持久化存储:watch监听数据变化,持久化到本地
export default {
  data() {
    return {
      list: JSON.parse(localStorage.getItem('todoList')) || [
        { id: 1, name: "吃饭" },
        { id: 2, name: "睡觉" },
        { id: 3, name: "打豆豆" },
      ]
    }
  },
}
watch: {
  // list(val) {
  //   localStorage.setItem('todoList', JSON.stringify(val))
  // }
  list: {
    handler(val) {
      localStorage.setItem('todoList', JSON.stringify(val))
    },
    deep:true
  }
}

相关文章

  • ng2-admin拆分

    拆分样式和公共组件,公共组件拆分时依赖作为参数传入,包括如下组件:

  • vue案例总结------拆分组件

    一、 (1)、拆分静态组件:组件要按照功能点拆分,命名不要与html元素冲突。 (2)、实现动态组件:...

  • iOS组件化- 拆分基础组件

    将一个项目组件化拆分掉,一般会拆分一些基础组件、一些功能组件和业务组件。将拆分好的组件放到远程仓库,统一通过Coc...

  • toDoList案例

    1.组件化编码流程(1)拆分静态组件:组件要按照功能点拆分,命名不要与 html 元素冲突(2)实现动态组件:考虑...

  • iOS组件化拆分之业务与拆分并行开发

    iOS组件化拆分之业务与拆分并行开发

  • 组件化开发心法

    组件化编码流程拆分静态组件:按照功能点拆分,命名不要冲突实现动态组件,一个组件用的数据放在该组件身上,一些组件公用...

  • iOS组件化(Router)

    组件化优点 降低耦合度 组件单独开发,单独测试 多人协作开发 缺点 版本同步问题 组件拆分 业务拆分(登录,聊天,...

  • Vue 父子组件通信

    案例一 父组件 子组件 案例二 父组件 子组件

  • React-todo-list 系列二

    状态组件 => 组件拆分 TodoList.js TodoItem.js

  • vue学习(37)TodoList案例总结

    知识点 1.组件化编码流程  (1).拆分静态组件:组件要按照功能点拆分,命名不要和html元素名冲突。  (2)...

网友评论

      本文标题:案例-记事本组件拆分

      本文链接:https://www.haomeiwen.com/subject/chsytjtx.html