Vue搜索功能

Vue搜索功能

知识点:v-model数据双向绑定,绑定对象是input
@keyup="seachup()"是键盘事件
菜单列表显示搜索效果图1:
在这里插入图片描述
菜单列表不显示,输入关键字显示菜单列表效果图2:
在这里插入图片描述

  1. HTML

    <template>
    
    	<div id="search">
    	<header>
    		<div class="header_input">
    			<!-- 绑定search并在data定义值为空 -->
    			<input type="text" placeholder="请输入菜名" v-model="search">
    		</div>
    	</header>
    
    	<div id="content">
    		<ul>
    			<!-- 搜索功能	要求1:菜单列表显示搜索;渲染数据 -->
    			<!-- <li v-for="item in listr">	语法item是数据迭代的别名;listr是源数据数组
    				<router-link :to="'MenuDetails/'+item.caidan_id">
    					<img :src="url+'/'+item.caidan_img" alt="">
    					<p><b>{{item.caidan_name}}</b></p>
    					<p>¥{{item.caidan_jiag}}</p>
    					<p>已售:{{item.caidan_flas}}份</p>
    				</router-link>
    			</li> -->
    			
    			<!-- 搜索功能	要求2:菜单列表不显示,输入关键字显示菜单列表 -->
    			<!-- 语法item是数据迭代的别名;listr是源数据数组 -->
    			<li v-for="item in listr">		<!-- 第六步:渲染所获取到的数据 -->
    				<router-link :to="'MenuDetails/'+item.caidan_id">
    					<img :src="url+'/'+item.caidan_img" alt="">
    					<p><b>{{item.caidan_name}}</b></p>
    					<p>¥{{item.caidan_jiag}}</p>
    					<p>已售:{{item.caidan_flas}}份</p>
    				</router-link>
    			</li>
    					</ul>
    				</div>
    		</div>
    </template>
    
  2. JS

    <script>
    	import config from "@/metole/config.js"
    	export default{
    		data(){
    			return{
    				list:[],
    				listr:[],
    				search:'',	//初始化数据为空
    				url:config.url
    	    	}
    		},
    		methods:{
    			getData(){
    				//使用get方式获取数据库数据
    				this.$http.get(this.url+"phpvue/web/caidan.php").then((response)=>{
    					this.list=response.body;
    				},(err)=>{
    					console.log(err);
    				})
    			},
    			// 搜索功能	要求2:菜单列表不显示,输入关键字显示菜单列表
    			seachup(){						//第一步:键盘事件:input输入文本触发
    				var str = {					//第二步:定义输入框的数据保存给str
    					search:this.search
    				}
    				if(this.search!=""){		//第三步:判断输入框不等于空,则执行下面代码
    					this.$http.post(this.url+"phpvue/web/search.php",str,{emulateJSON:true}).then((success)=>{//第四步:使用post方式获取数据库数据并转换为JSON数据
    						this.listr=success.body;	//第五步:取body里面数据保存给listr;做为数据源
    						console.log(success);
    					},(err)=>{
    						console.log(err);
    					})
    				}
    
    			}
    	    		},
    	    		created(){
    			this.getData();
    		},
    		computed: {
    			//搜索功能函数
    			//搜索功能	// 要求1:菜单列表显示搜索
    			listr: function() {	//数据源定义一个函数
    				var search = this.search;	//定义search保存inout输入的数据
    				if (search) {				//判断search里面的数据
    					return this.list.filter(function(product) {	//这里返回的list是通过get获取的数据
    						return Object.keys(product).some(function(key){
    							return String(product[key]).toLowerCase().indexOf(search) > -1
    						})
    					})
    				}
    				return this.list;	//返回list数据
    			},
    	    		}
    	    	}
    </script>
    
  3. CSS
    略…

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 Vue 搜索功能只能搜索到当前页数据的问题,你可以通过以下步骤来实现搜索整个数据集的功能: 1. 在 Vue 组件中定义一个变量来存储整个数据集,例如 `dataList`。 2. 在搜索输入框中绑定一个 `v-model` 来实时获取用户输入的搜索关键字,例如 `searchKeyword`。 3. 在数据列表中使用 `v-for` 循环遍历 `dataList`,并使用 `v-if` 来判断是否符合搜索关键字的条件。 4. 在 `v-if` 中使用 JavaScript 的字符串搜索方法(如 `includes`)来判断当前项是否包含了搜索关键字。 5. 在搜索按钮的点击事件中,执行搜索逻辑,将符合条件的数据项筛选出来,并将结果保存到一个新的数组中。 6. 在页面上展示筛选后的结果。 以下是一个简单的示例代码: ```html <template> <div> <input type="text" v-model="searchKeyword" placeholder="请输入关键字"> <button @click="search">搜索</button> <ul> <li v-for="item in filteredDataList" :key="item.id">{{ item.name }}</li> </ul> </div> </template> <script> export default { data() { return { dataList: [ { id: 1, name: 'Apple' }, { id: 2, name: 'Banana' }, { id: 3, name: 'Orange' }, // 其他数据项... ], searchKeyword: '', }; }, computed: { filteredDataList() { if (this.searchKeyword) { return this.dataList.filter(item => item.name.includes(this.searchKeyword)); } else { return this.dataList; } }, }, methods: { search() { // 执行搜索逻辑 if (this.searchKeyword) { // 筛选出符合条件的数据项并保存到新的数组中 const result = this.dataList.filter(item => item.name.includes(this.searchKeyword)); // 处理搜索结果... } }, }, }; </script> ``` 在上述示例中,我们通过在 `filteredDataList` 计算属性中根据搜索关键字来筛选数据项,并在页面上展示筛选后的结果。同时,在搜索按钮的点击事件中也执行了相同的筛选逻辑,你可以根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值