vue中实现简易的输入框的模糊搜索,并渲染在页面。(附上代码示例)

1:举个例子,用户有4个数据,我们想在输入框搜索后,能让数据从原来的4条数据变成只显示出和我们输入相关的数据。

即实现如下图这样的效果:

 2:思路上怎么实现呢?首先第一步我们应该想到用v-model 拿到用户的输入:

就像这样:这里通过keyWord 已经拿到了用户的输入

		<div id="root">
			<h2>用户</h2>
			<input type="text" placeholder="请输入" v-model="keyWord">
			<ul>
				<li v-for="(item,index) of perons" :key="index">
					{
   
   {item.name}}---{
   
   {item.age}}---{
   
   {item.sex}}
				</li>
			</ul>
		</div>

 那么此时data中的keyWord就会随着用户输入而有对应的值。

			new Vue({
				el:'#root',
				data:{
					keyWord:'',
					persons:[
						{id:'1',name:'张三丰',age:19,sex:'男'},
						{id:'2',name:'张晓雨',age:20,sex:'女'},
						{id:'3',name:'王晓明',age:28,sex:'男'},
						{id:'4',name:'王大熊',age:32,sex:'男'}
					]
				}
			}) 

那么接下来就是想着把输入的值和已经有的数据进行对比,如果有一样的字段的数据,那么这些数据就是我们想重新渲染到页面的数据。

这里我们用到数组的filter方法

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测。

注意: filter() 不会改变原始数组

以及indexOf方法

indexOf() 方法可返回数组中某个指定的元素位置。

该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。

如果代码在数组中没找到指定元素则返回 -1。

代码如下:

				computed:{
					filPerons(){
						return this.persons.filter((item)=>{
							return item.name.indexOf(this.keyWord) !== -1
						})
					}
				}

此时应该把一开始遍历显示的persons数组改为新的数组filPersons

<li v-for="(item,index) of filPerons" :key="index">

对computed计算属性不了解的可以查查。说明白就是filPersons这个玩意直接会执行并且返回值。而这里返回的是一个新的数组。所以可以在页面渲染。

完整代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>列表</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
	
		<div id="root">
			<h2>用户</h2>
			<input type="text" placeholder="请输入" v-model="keyWord">
			<ul>
				<li v-for="(item,index) of filPerons" :key="index">
					{
   
   {item.name}}---{
   
   {item.age}}---{
   
   {item.sex}}
				</li>
			</ul>
		</div>

		<script type="text/javascript">
			Vue.config.productionTip = false
			

			new Vue({
				el:'#root',
				data:{
					keyWord:'',
					persons:[
						{id:'1',name:'张三丰',age:19,sex:'男'},
						{id:'2',name:'张晓雨',age:20,sex:'女'},
						{id:'3',name:'王晓明',age:28,sex:'男'},
						{id:'4',name:'王大熊',age:32,sex:'男'}
					]
				},
				computed:{
					filPerons(){
						return this.persons.filter((p)=>{
							return p.name.indexOf(this.keyWord) !== -1
						})
					}
				}
			}) 
		</script>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_50656154/article/details/125781170