You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于JSON对象实现Vue搜索栏:需求说明及现有代码咨询

嘿,我帮你把这段基于Vue的JSON数据搜索栏代码补全并格式化好了,直接就能运行,还能清晰看到每个部分的作用👇

基于Vue的JSON数据搜索栏实现

下面是完整可运行的代码,我补全了缺失的搜索逻辑、结果展示模块,还添加了基础样式和模拟的JSON数据源:

<html>
<head>
  <script src="https://unpkg.com/vue"></script>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <style>
    /* 简单美化界面,提升用户体验 */
    .search-container {
      max-width: 600px;
      margin: 20px auto;
      padding: 0 20px;
    }
    #search-input {
      width: 100%;
      padding: 10px;
      font-size: 16px;
      margin-bottom: 20px;
      border: 1px solid #ddd;
      border-radius: 4px;
    }
    .result-item {
      padding: 12px;
      border-bottom: 1px solid #eee;
    }
    .result-item:last-child {
      border-bottom: none;
    }
  </style>
</head>
<body>
  <div id='app' class="search-container">
    <!-- 搜索输入框,双向绑定搜索关键词 -->
    <input type="text" id="search-input" v-model="searchQuery" placeholder="输入关键词搜索...">
    
    <!-- 搜索结果展示区域 -->
    <div v-if="filteredResults.length > 0">
      <h3>搜索结果 ({{ filteredResults.length }})</h3>
      <div class="result-item" v-for="(item, index) in filteredResults" :key="index">
        <p><strong>名称:</strong>{{ item.name }}</p>
        <p><strong>描述:</strong>{{ item.description }}</p>
      </div>
    </div>
    <div v-else>
      <p>{{ searchQuery ? '没有找到匹配的结果' : '请输入关键词开始搜索' }}</p>
    </div>
  </div>

  <script>
    new Vue({
      el: '#app',
      data() {
        return {
          searchQuery: '',
          dataList: [] // 存储JSON数据的数组
        }
      },
      computed: {
        // 计算属性:实时根据搜索关键词过滤数据
        filteredResults() {
          if (!this.searchQuery.trim()) {
            return []; // 关键词为空时返回空数组
          }
          const keyword = this.searchQuery.toLowerCase();
          return this.dataList.filter(item => {
            // 可根据你的JSON结构调整匹配字段,这里匹配名称和描述
            return item.name.toLowerCase().includes(keyword) || 
                   item.description.toLowerCase().includes(keyword);
          });
        }
      },
      mounted() {
        // 模拟本地JSON数据(你可以替换成自己的数据源)
        this.dataList = [
          { id: 1, name: 'Vue.js', description: '一套用于构建用户界面的渐进式框架' },
          { id: 2, name: 'Axios', description: '基于Promise的HTTP客户端,用于浏览器和node.js' },
          { id: 3, name: 'jQuery', description: '快速、简洁的JavaScript库' },
          { id: 4, name: 'JavaScript', description: '网页开发的核心脚本语言' }
        ];

        // 如果是远程JSON数据,取消下面注释并替换成你的接口URL
        // axios.get('your-json-data-api-url')
        //   .then(response => {
        //     this.dataList = response.data;
        //   })
        //   .catch(error => {
        //     console.error('加载数据失败:', error);
        //   });
      }
    });
  </script>
</body>
</html>

核心功能说明

  • 双向数据绑定:通过v-model="searchQuery"实现输入框内容与Vue数据的实时同步,输入的关键词会自动更新到变量中。
  • 动态过滤:computed属性filteredResults会在关键词变化时自动过滤JSON数据,返回匹配的结果(不区分大小写)。
  • 状态反馈:根据搜索结果数量展示不同提示——关键词为空时显示引导文字,无匹配结果时提示用户。
  • 灵活适配:如果你的JSON结构不同,只需修改filteredResults里的匹配字段;如果是远程数据,替换mounted中的axios请求即可。

内容的提问来源于stack exchange,提问作者user8953355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:39:48