使用vue完成表单动态添加,删除,搜索

本文展示了如何在Vue项目中实现表单的动态添加、删除及搜索功能。通过数据双向绑定和自定义指令,实现了搜索框自动获取焦点的效果。还涉及到时间过滤器的使用,以优化时间显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:

  • 下面代码的实现是基于vue的,所以在使用之前要先使用vue-cli搭建项目

搜索功能效果图

在这里插入图片描述

添加功能效果图

在这里插入图片描述

知识点

  • vue数据双向绑定
  • 使用过滤器对时间进行处理
  • 自定义指令,页面已下载,搜索框自动获取焦点

源代码

  <div class="hello">
		 <label>
				Id:
						<input type="number" v-model="id" />
		</label>
		<label>
				Name: 
						<!-- @keyup.enter 使用Vue已经封装好的回车键键盘码事件  -->
						<input type="text"  v-model="name" @keyup.enter="btnClick()" />
		</label>
		<!-- 在Vue中,使用事件绑定机制,为元素指定处理函数的时候如果加了小括号,就可以给函数传参了 -->
		<input type="button" value="添加" @click="btnClick()" />
		<label>
				搜索名称关键字:
						<input type="text" v-model="keyWords" v-focus v-color="'#f00'"  />
						<!-- v-color="blue" 这个时候会把blue当作变量去vm实例中查找,所以要加单引号 -->
		</label>
		<div>
			<table border="1" style="margin: 100px auto;" cellpadding="10" cellspacing="0" width="500">
				<thead>
					<tr>
						<th>ID</th>
						<th>Name</th>
						<th>Operation</th>
					</tr>
				</thead>
				<tbody>
					<!-- <tr v-for="(item,index) in list" :key="index"> -->
					<tr v-for="(item,index) in search(keyWords)" :key="index">
						<td>{{ item.id }}</td>
						<td>{{ item.name }}</td>
						<td>{{ item.ctime | timeFormat }}</td>
						<td><a href="#" @click="delClick(item.id)">删除</a></td>
					</tr>
				</tbody>
			</table>
		</div>
  </div>
</template>

<script>
export default {
  // name: 'HelloWorld',
  data () {
    return {
      id:'',
			name:'',
			keyWords:'',
			list:[
			    {id:1,name:'奔驰',ctime:new Date()},
			    {id:2,name:'宝马',ctime:new Date()},
			    {id:3,name:'奥迪',ctime:new Date()},
			    {id:4,name:'劳斯莱斯',ctime:new Date()},
			    {id:5,name:'越野',ctime:new Date()},
			],
    }
  },
	methods:{
		// 添加
		btnClick(){
			let flag = true;
			this.list.forEach((item,index) => {
				if(item.id == parseInt(this.id)){
					flag = false;
					item.name = this.name;
				}
			})
			if(flag){
				var car = {id:this.id,name:this.name,ctime:new Date()};
				this.list.push(car);
			}
			this.id = this.name = '';
		},
		// 删除
		delClick(id){
			this.list.splice(id-1,1);
		},
		// 根据关键字,进行查询
		search(key){
			var newList = this.list.filter(item => {
				if(item.name.includes(key)){
					return item;
				}
			})
			return newList;
		}
	},
	// 定义局部指令
	directives:{
		focus: {
			// 被绑定元素插入到父节点时调用 , el是原生的DOM元素
			inserted:function (el) {
				el.focus();
			}
		},
		color: {
			// 指令第一次绑定到元素时调用
			bind:function(el,binding) {
				// binding.value 指令的绑定值
				el.style.color = binding.value;
			}
		}
	},
	// 定义过滤器
	filters:{
		timeFormat(time) {
			var date = new Date(time);
			var year = date.getFullYear();
			var month = date.getMonth() + 1;
			var day = date.getDate();
			return `${year}-${month}-${day}`;
		}
	}
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值