位置: IT常识 - 正文

Vue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】(最全vue项目实战)

编辑:rootadmin
Vue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】 Vue3.x 项目实战(一)内容参考链接Vue2.x全家桶Vue2.x 全家桶参考链接Vue2.x项目(一)Vue2.x 实现一个任务清单Vue2.x项目(二)Vue2.x 实现GitHub搜索案例Vue3.x项目(三)Vue3.x 实现一个任务清单文章目录Vue3.x 项目实战(一)Vue3.x 实现 todoList1、前言2、项目演示(一睹为快)3、涉及知识点4、项目详情5、写在最后的话6、附源码Vue3.x 实现 todoList1、前言

推荐整理分享Vue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】(最全vue项目实战),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:最全vue项目实战,vue做项目的流程,vue项目实战教程,vue实例完整项目源码,vue项目实例,vuecli项目实战,vue做项目的流程,vue项目实例,内容如对您有帮助,希望把文章链接给更多的朋友!

如果你对 vue3 的基础知识还很陌生,推荐先去学习一下 vue 基础

内容参考链接Vue2.x全家桶Vue2.x全家桶参考链接Vue3.x的基本使用Vue3.x基本使用参考链接如果你 刚学完 vue3 基础知识,想检查一下自己的学习成果如果你 已学完 vue3 基础知识,想快速回顾复习如果你 已精通 vue3 基础知识,想做个小案例那不妨看完这篇文章,我保证你一定会有收获的!2、项目演示(一睹为快)

Vue3.x_任务清单

3、涉及知识点

麻雀虽小,五脏俱全,接下来开始我们的项目之旅吧~~

Vue3.x基础:插值语法,常用指令,键盘事件,列表渲染,计算属性,生命周期Vue3.x进阶:props(父传子),自定义事件(任意组件间通信)Vuex4.x:状态管理库的使用Vue-router4.x:使用路由进行页面跳转

备注:

任意组件间的通信方式有很多种(全局事件总线,消息订阅预发布…),熟练掌握一种即可(推荐自定义事件,配置简单,容易理解)本文是 vue 基础的练习项目,也涉及 vue 周边(Vuex,Vue-Router)4、项目详情

main.js

导入 store 和 router,并且使用import { createApp } from 'vue'import App from './App.vue'import router from './router'import store from './store'createApp(App).use(store).use(router).mount('#app')

./router/index.js

配置路由直接导入 VS 按需导入(节约性能)使用了 history 路由模式import { createRouter, createWebHistory } from 'vue-router'// 直接引入import Start from '../views/Start.vue'const routes = [ { path: '/', name: 'Start', component: Start }, { path: '/home', name: 'Home', // 按需引入,节约性能 component: () => import('../views/Home.vue') }]// 创建路由对象const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes})export default routerVue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】(最全vue项目实战)

./store/index.js

state 中定义初始化数据mutations 中定义方法import { createStore} from 'vuex'export default createStore({ // 定义初始化状态 state: { list: [ { title: "吃饭", complete: false, }, { title: "睡觉", complete: false, }, { title: "敲代码", complete: true, }, ] }, // 同步修改 state 都是方法 // 第一个参数 state 第二个参数是需要修改的值 mutations: { // 添加任务 addTodo(state, payload) { state.list.push(payload) }, // 删除任务 delTodo(state, payload) { state.list.splice(payload, 1) }, // 清除已完成 clear(state, payload) { // 把过滤之后的数组传进来 state.list = payload } }, // 异步提交 mutation // 第一个参数是 store 第二个参数是修改的值 actions: { }, // 模块化 modules: {}})

App.vue 组件

做呈现的组件<router-view /> 呈现内容<template> <router-view/></template><style lang="scss"> * { margin: 0; padding: 0; }</style>

Start.vue 组件

初始化页面点击开启任务,跳转到任务页面<template> <div class="title"> <h1>欢迎来到前端杂货铺</h1> <button @click="start">开始任务</button> </div></template><script>import { ref } from "vue";import { useRouter } from "vue-router";export default { name: "Start", setup() { // router 是全局路由对象 let router = useRouter(); let name = ref(10); // 点击进行路由跳转 let start = () => { router.push({ name: "Home", params: { name: name.value, }, }); }; return { start, }; },};</script><style lang="scss" scoped>.title { color: orange; text-align: center; margin-top: 20%;}button { margin-top: 20px; width: 100px; height: 50px; background: skyblue; color: white; font-weight: bold; font-size: 15px; cursor: pointer;}button:hover { font-weight: bold; background: white; color: skyblue; cursor: pointer;}</style>

Home.vue 组件

其他组件 表演的舞台传递数据自定义事件,进行组件间通信<template> <div class="container"> <nav-header @add="add"></nav-header> <nav-main :list="list" @del="del"></nav-main> <nav-footer :list="list" @clear="clear"></nav-footer> </div></template><script>import NavHeader from "@/components/navHeader/NavHeader";import NavMain from "@/components/navMain/NavMain";import NavFooter from "@/components/navFooter/NavFooter";import { ref, computed } from "vue";import { useStore } from "vuex";export default { name: "Home", // 接收父组件的数据 props: {}, // 定义子组件 components: { NavHeader, NavMain, NavFooter, }, // 接收的数据,上下文 setup(props, ctx) { let store = useStore(); let list = computed(() => { return store.state.list; }); let value = ref(""); // 添加任务 let add = (val) => { value.value = val; // 任务存在 不能重复添加 let flag = true; list.value.map((item) => { if (item.title === value.value) { // 有重复任务 flag = false; alert("任务已存在"); } }); // 没有重复任务 if (flag == true) { // 调用 mutation store.commit("addTodo", { title: value.value, complete: false, }); } }; // 删除任务 let del = (val) => { // 调用删除的 mutation store.commit('delTodo', val) console.log(val); } // 清除已完成 let clear = (val) => { store.commit('clear', val) } return { add, list, del, clear }; },};</script>

NavHeader.vue 组件

头部组件(输入框)输入任务按下回车进行任务的添加emit,使用分发的事务<template> <div> <div class="container"> <input type="text" placeholder="请输入任务名称" v-model="value" @keyup.enter="enter" /> </div> </div></template><script>import { ref } from "vue";export default { name: "navHeader", // 接收的数据,上下文 setup(props, ctx) { let value = ref(""); // 按回车键确认 let enter = () => { // 把输入框的内容传递给父组件 ctx.emit("add", value.value); // 清空输入框 value.value = ""; }; return { value, enter, }; },};</script><style lang="scss" scoped>.container { text-align: center; margin-top: 220px;}.container input { height: 25px; width: 200px; margin-bottom: 10px;}</style>

NavMain.vue 组件

props 接收 list 数据v-for 遍历出来内容使用条件判断做呈现<template> <div class="container"> <div v-if="list.length > 0"> <div v-for="(item, index) in list" :key="index"> <div class="item"> <input type="checkbox" v-model="item.complete" /> {{ item.title }} <button class="del" @click="del(item, index)">删除</button> </div> </div> </div> <div v-else> 暂无任务 </div> </div></template><script>export default { name: "navMain", props: { list: { type: Array, required: true, }, }, // 分发事件的属性名 emits: ["del"], setup(props, ctx) { // 删除任务 let del = (item, index) => { ctx.emit("del", index); console.log(index, item); }; return { del, }; },};</script><style lang="scss" scoped>.container { margin: auto; border: 2px solid #ccc; width: 200px; margin-bottom: 20px;}.item { height: 35px; line-height: 35px; position: relative; width: 200px; button { cursor: pointer; position: absolute; right: 4px; top: 6px; display: none; z-index: 99; } &:hover { background: #ddd; button { display: block; } }}</style>

NavFooter.vue 组件

过滤出已完成的任务,获取到已完成任务的个数过滤出未完成的任务,清除的时候保留未完成的任务<template> <div class="container"> 已完成 {{ isCompelete }} / 全部 {{ list.length }} <span v-if="isCompelete" class="btn"> <button @click="clear">清除已完成</button> </span> </div></template><script>import { computed } from "vue";export default { name: "navFooter", props: { list: { type: Array, required: true, }, }, setup(props, ctx) { let isCompelete = computed(() => { // 过滤已完成 let arr = props.list.filter((item) => { return item.complete; }); return arr.length; }); // 清除已完成 let clear = () => { // 过滤未完成的 let arr = props.list.filter((item) => { return item.complete === false; }); ctx.emit("clear", arr); console.log("clear"); }; return { isCompelete, clear, }; },};</script><style lang="scss" scoped>.container { text-align: center;}</style>

至此,此项目就实现了,如果什么问题,欢迎评论区或私信留言,看到定会第一时间解决!

5、写在最后的话

如果你是 看完全篇 阅读到了这里,我相信你一定是有收获的!

那么下面不妨打开自己的电脑,启动自己的编译器,来跟着做 / 自己做一遍吧!

有机会的话,在不久的将来还会对这个小案例进行升级(功能以及样式的升级)敬请期待吧~~

6、附源码

本文链接地址:https://www.jiuchutong.com/zhishi/298299.html 转载请保留说明!

上一篇:Chrome插件开发教程(chrome 浏览器插件开发)

下一篇:GPS启动方式、定位速度、定位精度介绍(gps定位器怎么开启)

  • 苹果13有pro版吗(苹果13pro有5g吗)

    苹果13有pro版吗(苹果13pro有5g吗)

  • iphone13闹钟音量怎么调(iphone13闹钟音量和电话铃声音量)

    iphone13闹钟音量怎么调(iphone13闹钟音量和电话铃声音量)

  • 电脑突然重启怎么解决(电脑突然重启怎么办)

    电脑突然重启怎么解决(电脑突然重启怎么办)

  • 为什么图片在word里面只显示一部分(为什么图片在word里面不显示)

    为什么图片在word里面只显示一部分(为什么图片在word里面不显示)

  • 芒果tv7天会员怎么激活(芒果tv7天会员怎么领)

    芒果tv7天会员怎么激活(芒果tv7天会员怎么领)

  • Excel表格文本格式怎么变成数字(excel表格文本格式转为数字)

    Excel表格文本格式怎么变成数字(excel表格文本格式转为数字)

  • 手机声卡是什么(手机怎么使用声卡)

    手机声卡是什么(手机怎么使用声卡)

  • 企业微信直播老师可以看到学生吗(企业微信直播老师可以听见学生吗)

    企业微信直播老师可以看到学生吗(企业微信直播老师可以听见学生吗)

  • 美图秀秀有历史记录吗(美图秀秀有历史版本吗)

    美图秀秀有历史记录吗(美图秀秀有历史版本吗)

  • 为什么笔记本摄像头黄黄的(为什么笔记本摄像头打开是黑的)

    为什么笔记本摄像头黄黄的(为什么笔记本摄像头打开是黑的)

  • 双频千兆路由器什么意思(移动双频千兆路由器)

    双频千兆路由器什么意思(移动双频千兆路由器)

  • 怎么看u盘是2.0还是3.0(怎么看u盘是2.0还是3.0 3.1)

    怎么看u盘是2.0还是3.0(怎么看u盘是2.0还是3.0 3.1)

  • 如何屏蔽微信群中一个人发的信息(如何屏蔽微信群里某个人发的消息)

    如何屏蔽微信群中一个人发的信息(如何屏蔽微信群里某个人发的消息)

  • mac有office2010版吗(office2010mac版本)

    mac有office2010版吗(office2010mac版本)

  • v30pro支持无线充电吗(v30 pro 无线充)

    v30pro支持无线充电吗(v30 pro 无线充)

  • 计算机主频用什么表示(计算机主频的概念)

    计算机主频用什么表示(计算机主频的概念)

  • 键盘上的锁屏键是哪个(键盘上的锁屏键怎么不管用)

    键盘上的锁屏键是哪个(键盘上的锁屏键怎么不管用)

  • 华为照片怎么显示时间和位置(华为照片怎么显示经纬度时间地点)

    华为照片怎么显示时间和位置(华为照片怎么显示经纬度时间地点)

  • 手机号码注销了还能查到信息吗(手机号码注销了微信密码忘了怎么办)

    手机号码注销了还能查到信息吗(手机号码注销了微信密码忘了怎么办)

  • ios13如何修改微信声音(苹果ios13怎么改微信提示音)

    ios13如何修改微信声音(苹果ios13怎么改微信提示音)

  • iphone7plus可以升级ios13吗(iphone7plus可以升级ios15吗)

    iphone7plus可以升级ios13吗(iphone7plus可以升级ios15吗)

  • 苹果x可以改双卡吗(苹果x可以改双扬声器吗)

    苹果x可以改双卡吗(苹果x可以改双扬声器吗)

  • 苹果扣费项目在哪个里面关(苹果扣费项目在哪里找)

    苹果扣费项目在哪个里面关(苹果扣费项目在哪里找)

  • 抖音上传不了本地音乐(抖音上传不了是什么情况)

    抖音上传不了本地音乐(抖音上传不了是什么情况)

  • 谷歌浏览器adobe flash player已过期,如何更新?(谷歌浏览器adobe flash player已不再支持)

    谷歌浏览器adobe flash player已过期,如何更新?(谷歌浏览器adobe flash player已不再支持)

  • U盘加载速度缓慢是怎么回事?解决方法
	

	

	
(u盘加载缓慢)

    U盘加载速度缓慢是怎么回事?解决方法 (u盘加载缓慢)

  • win10没法开机怎么重装系统?电脑无法进入桌面也能重装Win10系统图文教程(windows 10无法开机)

    win10没法开机怎么重装系统?电脑无法进入桌面也能重装Win10系统图文教程(windows 10无法开机)

  • WordPress数据库修改用户名方法(wordpress建立数据库错误)

    WordPress数据库修改用户名方法(wordpress建立数据库错误)

  • 房产税计税依据包括土地价值吗
  • 一般纳税人销项税和进项税如何抵扣
  • 支付境外培训费
  • 无偿赠送商品要纳企业所得税吗
  • 商业企业销售的商品遭受损失的赔偿依据
  • 短期借款会计科目使用说明
  • 职工伤残补助金被单位扣留违反什么法
  • 管理费用是进项还是销项
  • 村集体经济组织法
  • 零工受伤老板怎么赔偿
  • 现金支付可以报销吗
  • 砂石加工行业交什么税
  • 如何查询进项发票是否作废
  • 印花税是填开票金额吗
  • 跨年度的成本费用发票怎么入账
  • 增值税出口退税计算
  • 收到委托代销清单的会计分录
  • 当期的费用
  • 期末进项税额和销项税额都有余额
  • linux命令执行成功后会返回什么
  • 云下载并重新安装
  • qqprotect.exe是什么进程?qqprotect.exe怎么禁止自动启动?
  • 升级鸿蒙系统后
  • 电脑上网速度慢的原因及解决方法
  • 软件开发过程rup
  • 旅客购买电子客票
  • Windows11电脑更新后冲不上电
  • win7安装netframework4.5
  • mysqld-nt.exe - mysqld-nt是什么进程 有什么用
  • 在建工程进项税可以抵扣吗
  • linux网络接口状态命令
  • PHP:shell_exec()的用法_命令行函数
  • 非营利组织企业所得税免税收入
  • 关于扩展检索,下列说法正确的是
  • 工程扣款 甲方账务处理
  • 转入固定资产清理会计科目
  • php面向对象编程
  • egi脑电数据处理
  • yolov1 实现
  • 代理电信业务属于什么行业
  • 印花税申报未扣款在哪里查询
  • 什么是零申报,长期零申报有什么风险
  • 财务费用税前扣除标准是多少
  • 帝国cms如何搭建的
  • 你必须了解的最大的问题
  • 大华摄像头海康威视录像机
  • mongodb添加数据
  • 所有者投入的资本属于什么会计要素
  • 客户多付的尾数计入什么科目
  • 建筑公司跨区域经营预缴
  • 现金比率的计算例题
  • 印花税不足一元免征吗
  • 印花税每个月都计提吗
  • 商场联营扣点缴纳增值税税率
  • 衍生工具属于什么科目
  • 税务登记证办理流程
  • 政府部门有税务和审计审查吗
  • 商品盘点库存的方法
  • win7自带画图软件
  • win10 更新 蓝屏
  • linux安装iso软件
  • win7旗舰版开机
  • windows10 命令行
  • ubuntu命令行调节音量
  • win10扫雷在哪打开
  • win10不支持win7软件怎么办
  • 彻底弄懂js中的this指向
  • jquery实战
  • Nodejs+Socket.io实现通讯实例代码
  • js indexof undefined
  • 浅谈一下新冠的好处
  • word文件排序乱怎么恢复
  • unity导入工程根本运行不了
  • 猫猫的游戏
  • android对话框setview用法
  • 示例代码
  • 什么是城建税和土地税
  • 烟叶税属于中央税还是地方税
  • 手机银行如何查询明细
  • 中欧班列补贴政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设