使用 Vue.js 构建动态菜单树搜索

JavaScriptJavaScriptBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何使用Vue.js构建一个动态菜单树搜索功能。该项目包括从JSON文件中获取二级菜单数据、实现模糊搜索功能,并在页面上显示过滤后的菜单树。

👀 预览

动态菜单树搜索演示

🎯 任务

在这个项目中,你将学习:

  • 如何使用axios库从JSON文件中获取二级菜单数据
  • 如何实现一个搜索功能,根据用户输入过滤菜单项
  • 如何在页面上显示过滤后的菜单树,并突出显示匹配的文本

🏆 成果

完成这个项目后,你将能够:

  • 使用Vue.js开发一个动态且交互式的用户界面
  • 从JSON文件中获取数据并处理异步数据获取
  • 实现一个模糊搜索功能,根据用户输入过滤数据
  • 显示分层菜单树结构并突出显示匹配的文本

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript/BasicConceptsGroup -.-> javascript/loops("Loops") javascript/BasicConceptsGroup -.-> javascript/array_methods("Array Methods") javascript/AdvancedConceptsGroup -.-> javascript/async_prog("Asynchronous Programming") javascript/DOMManipulationGroup -.-> javascript/dom_manip("DOM Manipulation") javascript/NetworkingGroup -.-> javascript/http_req("HTTP Requests") subgraph Lab Skills javascript/loops -.-> lab-445759{{"使用 Vue.js 构建动态菜单树搜索"}} javascript/array_methods -.-> lab-445759{{"使用 Vue.js 构建动态菜单树搜索"}} javascript/async_prog -.-> lab-445759{{"使用 Vue.js 构建动态菜单树搜索"}} javascript/dom_manip -.-> lab-445759{{"使用 Vue.js 构建动态菜单树搜索"}} javascript/http_req -.-> lab-445759{{"使用 Vue.js 构建动态菜单树搜索"}} end

设置项目结构

在这一步中,你将设置项目文件和结构。请按照以下步骤完成此步骤:

打开项目文件夹。目录结构如下:

├── js
│    ├── axios.min.js ## 用于异步数据获取的Ajax封装库
│    ├── index.js ## 实现页面功能的逻辑代码
│    └── vue.js ## Vue.js框架的2.x版本
├── data.json ## 二级菜单的全部数据
└── index.html ## 页面布局

点击WebIDE右下角的Go Live按钮来运行项目。

接下来,在VM顶部打开“Web 8080”并手动刷新,你将看到页面。

目前,仅显示静态布局,尚未实现二级菜单数据的异步获取与显示以及模糊搜索功能。

获取二级菜单数据

在这一步中,你将学习如何使用axios库从data.json文件中获取二级菜单数据。

  1. 打开/js目录下的index.js文件。
  2. created()生命周期钩子中,使用axios.get()方法从data.json文件中获取数据:
created() {
  axios.get("../data.json").then((res) => {
    this.list = res.data;
    this.resultList = res.data;
  });
},

这段代码会从data.json文件中获取数据,并将其存储在listresultList数据属性中。

实现搜索功能

在这一步中,你将学习如何为二级菜单项实现搜索功能。

  1. index.js文件中,向methods对象添加一个searchData()方法:
methods: {
  searchData() {
    // TODO: 实现搜索功能
    this.resultList = [];
    let set = new Set();
    this.list.forEach((item1) => {
      if (item1.meta.title.search(this.search)!== -1) {
        set.add(item1);
      }
      if (item1.children) {
        item1.children.forEach((item2) => {
          if (item2.meta.title.search(this.search)!== -1) {
            set.add(item1);
          }
        });
      }
    });
    this.resultList = set;
  }
}
  1. 根据搜索输入更新resultList数据属性。searchData()方法将遍历list数据,并将任何匹配的项目添加到一个Set对象中。然后将Set对象赋给resultList数据属性。

此实现将显示与搜索查询匹配的二级菜单项,匹配的文本将以黄色背景突出显示。

通过这些更改,页面现在将根据搜索输入显示过滤后的菜单树,匹配的文本将被突出显示。

最终实现效果如下:

图片描述
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在LabEx中练习更多实验来提升你的技能。