VUE小案例——奇妙清单(vue指令综合应用)

需求:

运用Vue常用指令编写程序实现美妙清单功能:
列表展示、项目添加、项目删除、项目筛选、项目编辑

涉及到的指令有: v-on  v-show  v-model v-text  v-for 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/lib/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
		<h1>奇妙清单:</h1>
			<span><button @click="state='all'" type="button">所有 {{ taskLisk.length }}</button></span>
			<span><button @click="state='done'" type="button">已经完成 {{ doneList.length }}</button></span>
			<span><button @click="state='undo'" type="button">未完成 {{ taskLisk.length-doneList.length }}</button></span>
			
		<h2>添加任务(按enter键进行添加哦)</h2>
		<!-- 键盘点击事件 enter键确定添加 -->
		<input type="text"@keyup.enter="addTask" v-model="newTaskName">
		
		<h2>任务列表:</h2>
		<div v-for="(item,index) in currentList">
			<span v-show="editingTask==item">
				<input type="text" 
				 v-autofocus="flag"
				 @blur="cancel"
				 @keyup.esc="cancel"
				 @keyup.enter="confirm(index)"
				 v-model="editingName"
				 />
			</span>
			
			<span v-show="editingTask != item">
				<!-- 多选框 -->
				<input type="checkbox" v-model="item.done"/>
				<!-- 双击编辑功能 -->
				<span @dblclick="editTask(index)">{{item.name}}</span>
				<!-- 删除任务按钮 -->
				<button type="button"@click="delTask(index)" >&times;</button>
			</span>
			
		</div>
		
		</div>
		
		<script type="text/javascript">
			const vm= new Vue({
				el:"#app",
				data:{
					newTaskName:"",
					state:"all",
					flag:true,
					editingName:"",
					editingTask:null,
					taskLisk:[
						{
							name:" Learn Chinese",
							done:true
						},
						{
							name:" Learn AMaths",
							done:true
						},
						{
							name:" Learn English",
							done:true
						},
						{
							name:" Learn French",
							done:false
						}
					]
				},
				methods:{
					addTask(){
						if(this.newTaskName.length<=0){
							alert("添加内容不能为空哦")
						}
						else{
							this.taskLisk.push({
								name:this.newTaskName,
								done:false
							});
							// 添加完成后清空输入框
							this.newTaskName="";
						}
					},
					delTask(index){
						this.taskLisk.splice(index,1);
					},
					editTask(index){
						this.editingTask=this.currentList[index];
						this.editingName=this.currentList[index].name
					},
					cancel(){
						this.editingTask=null;
					},
					confirm(index){
						if(this.editingName.length<=0)
						{
							alert("The content cannot be empty!")
						}
						else
						{
							// 删除原有的任务,添加新的任务
							this.taskLisk.splice(index,1,{name:this.editingName,done:false})
						}
					}
				},
				
				// 计算属性
				computed:{
					doneList(){
						return this.taskLisk.filter((task)=>{
							return task.done;
						})
					},
					currentList(){
						if(this.state=="all"){
							return this.taskLisk
						}
						else if(this.state=="done"){
							return this.doneList;
						}
						else
						{
							return this.taskLisk.filter( (task)=>{
								return !task.done;
							});
						}
					}
				},
				
				// 编辑框聚焦失焦事件
				directives:{
					autofocus:{
						inserted:function(element,data){
							if(data.value){
								element.focus();
							}
							else
							{
								element.blur();
							}
						},
						update:function(element,data){
							if(data.value){
								element.focus();
							}
							else
							{
								element.blur();
							}
						}
					}
				}
			})
		</script>
		
		
		
	</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值