项目开发实战_go项目实战

项目开发实战_go项目实战TodoMVC是一个非常经典的案例,功能非常丰富,并且针对多种不同技术分别都开发了此项目,比如React、AngularJS、JQuery等等,本文使用Vue开发。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1 项目介绍与演示

TodoMVC 是一个非常经典的案例,功能非常丰富,并且针对多种不同技术分别都开发了此项目,比如React、AngularJS、JQuery等等。

TodoMVC 案例官网:http://todomvc.com/

在官网首页右下角, 有 案例的模板下载 和 开发规范(需求文档),如下图:
在这里插入图片描述

2 需求说明

2.1 数据列表渲染

当任务列表(items )没有数据时, #main 和#footer 标识的标签应该被隐藏

任务涉及字段:id、任务名称( name),是否完成(completed true为已完成)
在这里插入图片描述

2.2 添加任务

  1. 在最上面的文本框中添加新的任务。

  2. 不允许添加非空数据。

  3. 按Enter键添加任务列表中,并清空文本框。

  4. 当加载页面后文本框自动获得焦点,在 input 上使用 autofocus 属性可获得。

2.3 显示所有未完成任务数

  1. 左下角要显示未完成的任务数量。确保数字是由标签包装的。

  2. 还要将item单词多元化( 1 没有s , 其他数字均有s ): 0 items , 1 item ,2 items

示例: 在这里插入图片描述

2.4切换所有任务状态

在这里插入图片描述

2.5 移除任务项

在这里插入图片描述

2.6 清除所有已完成任务

  1. 单击右下角Clear completed按钮时,移除所有已完成任务。

  2. 单击Clear completed按钮后,确保复选框清除了选中状态

  3. 当列表中没有已完成的任务时,应该隐藏Clear completed按钮。

2.7 编辑任务项

  1. 双击

  2. 上通过.editing进行切换状态)。
  3. 进入编辑状态后输入框显示原内容,并获取编辑焦点。

  4. 输入状态按Esc 取消编辑, editing 样式应该被移除。

  5. 按Enter键 或 失去焦点时 保存改变数据,移除editing 样式;

2.8 路由状态切换(过滤不同状态数据)

根据点击的不同状态( All / Active / Completed ),进行过滤出对应的任务,并进行样式的切换。在这里插入图片描述

3 效果展示

在这里插入图片描述

4 完整源码

4.1 index.html

<!doctype html>
<html lang="en">

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Template • TodoMVC</title>
	<link rel="stylesheet" href="node_modules/todomvc-common/base.css">
	<link rel="stylesheet" href="node_modules/todomvc-app-css/index.css">
	<!-- CSS overrides - remove if you don't need it -->
	<link rel="stylesheet" href="css/app.css">
</head>

<body>
	<section class="todoapp" id="todoapp">
		<header class="header">
			<h1>todos</h1>
			<input class="new-todo" placeholder="What needs to be done?" autofocus @keyup.enter="addItem">
		</header>
		<template v-if="items.length">
			<!-- This section should be hidden by default and shown when there are todos -->
			<section class="main">
				<input id="toggle-all" class="toggle-all" type="checkbox" v-model="toggleAll">
				<label for="toggle-all">Mark all as complete</label>
				<ul class="todo-list">
					<!-- These are here just to show the structure of the list items -->
					<!-- List items should get the class `editing` when editing and `completed` when marked as completed -->
					<li v-for="(item,index) in filterItems" v-bind:class="{completed:item.completed , editing:currentItem===item}">
						<div class="view">
							<input class="toggle" type="checkbox" v-model="item.completed">
							<label @dblclick="toEdit(item)">{
  
  {item.content}}</label>
							<button class="destroy" @click="removeItem(index)"></button>
						</div>
						<input class="edit" :value="item.content" @keyup.esc="canceEdit" v-todofocus="currentItem===item" @keyup.enter="finishEdit(index,item,$event)" @blur="finishEdit(index,item,$event)">
					</li>

				</ul>
			</section>
			<!-- This footer should hidden by default and shown when there are todos -->
			<footer class="footer">
				<!-- This should be `0 items left` by default -->
				<span class="todo-count"><strong>{
  
  {remaining}}</strong> item{
  
  {remaining === 1 ? "" : "s"}} left</span>
				<!-- Remove this if you don't implement routing -->
				<ul class="filters">
					<li>
						<a class="selected" href="#/">All</a>
					</li>
					<li>
						<a href="#/active">Active</a>
					</li>
					<li>
						<a href="#/completed">Completed</a>
					</li>
				</ul>
				<!-- Hidden if no completed items are left ↓ -->
				<button class="clear-completed" v-show="items.length>remaining" @click="removeCompleted">Clear
					completed</button>
			</footer>
		</template>
	</section>
	<footer class="info">
		<p>Double-click to edit a todo</p>
		<!-- Remove the below line ↓ -->
		<p>Template by <a href="http://sindresorhus.com">Sindre Sorhus</a></p>
		<!-- Change this out with your name and url ↓ -->
		<p>Created by <a href="http://todomvc.com">you</a></p>
		<p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
	</footer>
	<!-- Scripts here. Don't remove ↓ -->
	<script src="node_modules/todomvc-common/base.js"></script>
	<script src="./node_modules/vue/dist/vue.js"></script>
	<script src="js/app.js"></script>
</body>

</html>

4.2 app.js

(function (Vue) { 
   
	
	var items = [
		{ 
   
			id:1,
			content:'vue',
			completed:true
		},
		{ 
   
			id:2,
			content:'js',
			completed:false
		},
		{ 
   
			id:3,
			content:'node',
			completed:true
		},
		{ 
   
			id:4,
			content:'ts',
			completed:false
		},
	]

	var vm = new Vue({ 
   
		el:"#todoapp",
		data:{ 
   
			items:items,
			currentItem:[],
			filterStatus:'all',
		},
		directives:{ 
   
			'todofocus':{ 
   
				update(el,binding){ 
   
					if(binding.value){ 
   
						el.focus();
					}
				}
			}
		},
		methods:{ 
   
			addItem(){ 
   
				var content = event.target.value.trim();
				if(!content.length){ 
   
					return
				}
				var id = this.items.length + 1;
				this.items.push({ 
   
					id:id,
					content:content,
					completed:false
				})
				event.target.value = '';
			},
			removeItem(index){ 
   
				this.items.splice(index,1)
			},
			removeCompleted(){ 
   
				this.items = this.items.filter(function(item){ 
   
					return !item.completed
				})
			},
			toEdit(item){ 
   
				this.currentItem = item;
			},
			canceEdit(){ 
   
				this.currentItem = ''
			},
			finishEdit(index,item,event){ 
   
				if(!event.target.value.trim()){ 
   
					return this.removeItem(index);
				}
				item.content = event.target.value.trim();
				this.canceEdit()
			}
		},
		computed:{ 
   
			filterItems(){ 
   
				switch(this.filterStatus){ 
   
					case 'active' : return this.items.filter(item => !item.completed);
					break;
					case 'completed' : return this.items.filter(item => item.completed);
					break;
					default : return this.items;
				}
			},
			remaining(){ 
   
				return this.items.filter(function(item){ 
   
					return !item.completed
				}).length
			},
			toggleAll:{ 
   
				get(){ 
   
					return this.remaining === 0
				},
				set(newValue){ 
   
					this.items.forEach(function(item){ 
   
						item.completed = newValue;
					})
				}
			}
		}
	})
	window.onhashchange = function(){ 
   
		var hash = window.location.hash.substr(2) || 'all';
		vm.filterStatus = hash;
	}
})(Vue);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194780.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++写一个CSGO开箱模拟器「建议收藏」

    C++写一个CSGO开箱模拟器「建议收藏」head玩过csgo的人类都知道,开箱是很有趣的。————名人名言Appstore上有专门的开箱模拟器,但是啊,他有广告。(;′⌒`)所以心善的博主决定自己用C++手撸一款开箱模拟器:3A大作,有整整一种箱子可供选择附加开箱动画,效果及其逼真…

    2022年9月28日
  • kali 国内更新源

    kali 国内更新源#更新源编辑vi/etc/apt/sources.list(增加中科大的源或者阿里云)#获取数字签名wgetarchivekali.org/archive-key.asc#安装数字签名apt-keyaddarchive-key.asc#中科大#debhttp://mirrors.ustc.edu.cn/kalikali-rollingmainnon-freecontrib#deb-srchttp://mirrors.ustc.edu.c

    2022年5月28日
  • centos7安装nginx1.16.1

    centos7安装nginx1.16.1centos7安装nginx1.16.1一.安装依赖库二.安装四.测试五.配置1.配置nginx为web容器2.配置nginx为代理服务器一.安装依赖库这里使用yum安装,如果是刚安装好的centos7,没有配置yum的话,点击此处yum-yinstallgccyum-yinstallpcrepcre-develyum-yinstallzlibzlib-develyum-yinstallopensslopenssl-devel二.安装wget下载ngin

    2022年6月4日
  • vue 带参数跳转_vue跳转页面的几种方法

    vue 带参数跳转_vue跳转页面的几种方法vue2.0在使用的过程中,.vue文件之间的跳转,在template中的常见写法是:&amp;lt;router-linkto=&quot;/miniCard/statement/horizon&quot;&amp;gt;&amp;lt;buttonclass=&quot;btnbtn-defaultcolorDe&quot;&amp;gt;继续&amp;lt;/button&amp;gt;&amp;l

    2022年10月27日
  • C#textBox变成密码框

    C#textBox变成密码框这不能说是技术了,也不能说是经验了,只能是提醒了。写C#基本都是用vs写吧,那在textBox对应的属性窗口里,有一个PasswordChar的属性,只要设置了对应的字符,那么textBox就成了密码框了。就是这么简单,浮云啊~

    2022年7月18日
  • when和while的区别和用法_when后面加do还是doing

    when和while的区别和用法_when后面加do还是doingwhen和while的区别主要有:指代不同、从句动词不同、时间状态不同、用法不同等。1、指代不同:when是atorduringthetimethat既指时间点,也可指一段时间,while是duringthetimethat只指一段时间。2、从句动词不同:when引导的时间状语从句中的动词可以是终止性动词,也可以是延续性动词,而while从句中的动词必须是延续性动词。3、时间状态不同:when说明从句的动作和主句的动作可以是同时,也可以是先后发生,while则强调主句的动作在从句

    2022年10月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号