欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue.js实现toDoList列表功能

程序员文章站 2022-05-16 21:30:22
...

toDoList是一个经典的案例,原生js,jquery和vue.js都可以实现此功能,我们先来看看用jquery实现此功能的代码。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" class="sendBtn">
		<h2>未完成</h2>
		<ul class="list1">
			<!-- <li> 
				<input type="checkbox" name="" id="" value="" />
				<span id="">
					看电视
				</span>
				<button type="button">删除</button>
			</li> -->
		</ul>

		<h2>已完成</h2>
		<ul class="list2">
			<!-- <li> 
				<input type="checkbox" name="" id="" value="" checked="checked"/>
				<span id="">
					打游戏
				</span>
				<button type="button">删除</button>
			</li> -->
		</ul>

		<script src="./lib/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			//jq  90行js todolist 
			let sendBtn = $('.sendBtn');
			let arr = [
				// status true 表示已完成
				{
					name: '看电视',
					status: false
				},
				{
					name: '玩游戏',
					status: true
				},
			];
			render()
			//发送按钮 
			sendBtn.change(function(){
				let name = sendBtn.val();
				let obj = {
					name: name,
					status: false
				};
				arr.push(obj);
				render()
			})
			//根据数据 arr  渲染页面 产生页面
			function render() {
				let list1 = $('.list1')
				let list2 = $('.list2')

				//拼字符串
				let list1Html = '';
				let list2Html = '';
				for (let i = 0; i < arr.length; i++) {
					let obj = arr[i];
					if (obj.status == false) {
						list1Html +=
							`
						<li>
							<input type="checkbox" name="" id="" value="" data-name="${obj.name}"/>
							<span id="">
								${obj.name}
							</span>
							<button type="button" class="dBtn" data-name="${obj.name}">删除</button>
						</li>
						`
					} else {
						list2Html +=
							`
						<li>
							<input type="checkbox" name="" id="" value="" checked="checked" data-name="${obj.name}"/>
							<span id="">
								${obj.name}
							</span>
							<button type="button" class="dBtn" data-name="${obj.name}">删除</button>
						</li>
						`
					}

				}
				
				list1.html(list1Html)
				list2.html(list2Html)
				//删除按钮
				$('.dBtn').click(function(){
					console.log(11)
					let name = $(this).attr('data-name');
					arr = arr.filter(v=>v.name !== name)
					render()
				})
				
				//修改按钮
				$('input[type=checkbox]').change(function(){
					////点击的是 未完成的列表
						//修改数组对应的元素的 属性值, 然后渲染页面
					let name = $(this).attr('data-name')
					let obj = arr.find(v=>v.name === name);
					console.log(obj)
					obj.status = this.checked;
					render()
				})
			}
		</script>
	</body>
</html>

可以看到,用jquery实现此功能的代码量是比较大的,更不用说原生的js代码了。vue框架十分强大,我们来看看vue实现此效果的代码。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<script src="../base/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
	<div id="box">
		<!-- 输入框 -->
		<input type="text" v-model="iptText" @change="inputChange()"><br>
		<!-- toDoList列表 -->
		<h2>toDoList列表</h2>
		<div class="toDoList" id="toDoList">
			<ul>
				<li v-for="todo,index in todolist" v-if="todo.state===false">
					<input type="checkbox"  id="checkBox1" @change="ckChange(index,true)"/><span>{{todo.name}}</span>
					<button type="button" @click="deleteDate(index)">删除</button>
				</li>
			</ul>
		</div>
		<hr >
		<!-- finish列表 -->
		<h2>Finish列表</h2>
		<div class="finish" id="finish">
			<ul>
				<li v-for="finish,index in todolist" v-if="finish.state===true">
					<input type="checkbox" id="checkBox2" checked="checked" @change="ckChange(index,false)"/><span>{{finish.name}}</span>
					<button type="button" @click="deleteDate(index)">删除</button>
				</li>
			</ul>
		</div>
	</div>
	<script type="text/javascript">
		let vm=new Vue({
			el:'#box',
			data:{
				iptText:'', //存输入框的内容
				todolist:[
					{name:'今天要打代码...',state:false},
					{name:'明天要接着打代码哦...',state:false},
					{name:'昨天已经过去了',state:true}
				]
			},
			methods:{
				//点击checkbox时候的变化方法
				ckChange(index,state){
					//知道自己获取的是数组里面的哪个对象
					// console.log(index)
					//找到对应的对象数据
					let todo1=this.todolist[index];
					//点击了checked复选框之后要改变这个数据的状态
					todo1.state=state;
				},
				//删除的方法,删除对应的下标的元素
				deleteDate(index){
					this.todolist.splice(index,1)
				},
				//获取到输入框内容的的方法
				inputChange(){
					let iptList={name:this.iptText,state:false};
					this.todolist.push(iptList);
					//将输入框的内容清空
					this.iptText=''
				}
			}
		})
	</script>
	</body>
</html>

vue.js的js代码部分也就20行左右就能实现此效果,完美!!!!

相关标签: vue.js

上一篇: Vue侦听器

下一篇: vue侦听器