Vue.js 使用搜索栏过滤分页文章无返回结果问题求助
问题原因
问题由两个核心错误导致:
- 过滤逻辑语法错误
你在计算属性filteredArticles中直接对item对象调用includes()方法,该方法仅支持字符串、数组类型调用,对象调用会直接报错或永远返回false,最终过滤结果永远是空数组,所以页面没有内容渲染。同时你没有指定要匹配的字段(标题/联系方式),自然无法实现搜索效果。 - 分页插件配置不匹配
你使用的vue-paginate插件要求分页名称全局统一:注册的分页配置、<paginate>组件的name和list属性、<paginate-links>的for属性、paginated()方法的入参必须完全一致。你只修改了paginated()的入参,其他配置还绑定的是原来的items,插件无法识别filteredArticles作为分页源。
修正方案
你需要同步修改过滤逻辑和分页配置,同时可以加大小写不敏感匹配优化搜索体验,完整修正代码如下:
<template> <div id="app"> <div class="search-wrapper"> <input type="text" class="search-bar" v-model="search" placeholder="Search in the articles"/> </div> <!-- 分页组件的name、list属性同步改为filteredArticles --> <paginate ref="paginator" class="flex-container" name="filteredArticles" :list="filteredArticles"> <li v-for="(item, index) in paginated('filteredArticles')" :key="index" class="flex-item"> <div id="image"><img :src="item.image && item.image.file" /></div> <div id="date">{{ item.pub_date }}</div> <div id="title"> {{ item.title }}</div> <div class="article">{{item.details_en}}</div> </li> </paginate> <!-- 分页链接的for属性同步改为filteredArticles --> <paginate-links for="filteredArticles" :limit="2" :show-step-links="true"></paginate-links> </div> </template> <script> import axios from "axios"; export default { data() { return { items: [], // 分页注册名称改为filteredArticles paginate: ["filteredArticles"], search:'', }; }, created() { this.loadPressRelease(); }, methods: { loadPressRelease() { axios .get(`https://zbeta2.mykuwaitnet.net/backend/en/api/v2/media-center/press-release/?page_size=61&type=5`) .then((response) => { this.items = response.data.results; }); }, }, computed:{ filteredArticles() { const searchTerm = this.search.trim().toLowerCase() // 无搜索词时返回全部列表 if (!searchTerm) return this.items // 匹配标题和你对应的联系方式字段,示例假设联系方式字段为contact,可替换为你实际的字段名 return this.items.filter(item=>{ return item.title.toLowerCase().includes(searchTerm) // 如需匹配联系方式去掉下面注释,替换为实际字段名 // || item.contact.toLowerCase().includes(searchTerm) }) } } }; </script>
内容的提问来源于stack exchange,提问作者Balazs Kelemen
相关产品推荐
相关产品推荐

