Vue3.0实现一个任务清单ToDoList & vue3小练习

3 篇文章 0 订阅
2 篇文章 0 订阅

在这里插入图片描述## 功能包含

  • 任务增加
  • 任务查找
  • 点击任务切换任务状态
  • 下方按钮实现任务展示切换

总而言之实现了任务的增改查
template代码:

<template>
  <div class="container">
    <h2>任务计划表</h2>
    <!-- 添加框 -->
    <div class="add">
      添加任务:<input
        v-model="taskModel"
        type="text"
        placeholder="添加任务比如:吃饭睡觉打豆豆"
      />
      <button @click="addTask">确定添加</button>
    </div>
    <!-- 搜索框 -->
    <div class="serch">
      查询任务:
      <input
        v-model="searchData.searchModel"
        type="text"
        placeholder="查询自己的任务"
      />
      &emsp;&emsp;&emsp;&nbsp;
    </div>
    <!-- 任务列表 -->
    <div class="list">
      <h4>任务列表</h4>
      <ol>
        <li
          v-for="item in taskFilter"
          :key="item.id"
          :class="{ active: !item.done }"
          @click="changeDone(item.id)"
        >
          {{ item.cont }}
        </li>
      </ol>
    </div>
    <!-- 任务选择 -->
    <div class="option">
      <button @click="searchData.searchDone = 'all'">所有任务</button>
      <button @click="searchData.searchDone = 'yes'">未完成任务</button>
      <button @click="searchData.searchDone = 'no'">完成任务</button>
    </div>
  </div>
</template>

script代码

<script>
import { ref, reactive, computed } from "vue";
export default {
  setup(props) {
    let task = reactive([
        { id: 0, cont: "吃饭", done: true },
        { id: 1, cont: "吃饭2", done: true },
        { id: 2, cont: "吃饭3", done: true },
        { id: 3, cont: "吃饭4", done: true }
    ]);
    //查找数据
    let searchData = reactive({
      searchModel: "",
      searchDone: "all", //all no yes
    });
    let taskModel = ref("");
    let idSum = 4;

    //添加任务
    function addTask() {
      const oneTask = {
        id: idSum,
        cont: taskModel,
        done: true,
      };
      idSum++;
      let temp = task.push(oneTask);
      if (temp) {
        alert("添加成功");
      }
    }
    //改变任务状态
    function changeDone(id) {
      task = task.map((item) => {
        if (item.id === id) {
          item.done = !item.done;
          return item;
        }
        return item;
      });
    //   console.log(task);
    }
    //计算属性筛选的值
    let taskFilter = computed(() => {
      let taskFilterT;
      switch (searchData.searchDone) {
        case "no":
          taskFilterT = task.filter((item) => {
            return item.cont.includes(searchData.searchModel) && !item.done;
          });
          break;
        case "yes":
          taskFilterT = task.filter((item) => {
            return item.cont.includes(searchData.searchModel) && item.done;
          });
          break;
        default:
          taskFilterT = task.filter((item) => {
            return item.cont.includes(searchData.searchModel);
          });
          break;
      }
      return taskFilterT;
    },{deep:true});
    return {
      task,
      addTask,
      taskModel,
      changeDone,
      searchData,
      taskFilter,
    };
  },
};
</script>

style样式

<style scoped lang="scss">
.container {
  width: 800px;
  margin: 30px auto;
  border: 1px solid black;
}
li {
  width: 500px;
  height: 20px;
  // border:  1px solid rgb(141, 108, 108);
  text-align: left;
  margin-left: 230px;
}
.active {
  text-decoration: line-through;
}
</style>
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值