web蓝桥杯真题:菜单树检索

代码及注释:

html 复制代码
<div id="app">
	<input type="text" @input="searchData" v-model="search" placeholder="请输入要搜索的菜单内容"/>
	<ul>
		<li v-for="item1 in resultList">    //遍历
			<span :style="{'background-color': item1.meta.title.includes(search) && search !== '' ? 'yellow' : ''}" >{{item1.meta.title}}</span>    //判断是否包含关键字并且关键字不为空
			<ul>
				<li v-for="item2 in item1.children">
					<span :style="{'background-color': item2.meta.title.includes(search) && search !== '' ? 'yellow' : ''}">{{item2.meta.title}}</span>
				</li>
			</ul>
		</li>
	</ul>
</div>
javascript 复制代码
const app = new Vue({
  el:"#app",
  // 在此处补全代码,实现二级菜单搜索功能
  data: {
    search: '',
    list: [],
    resultList: []
  },
  created() {     
      axios.get('./data.json').then(res => {    //请求获取数据
        this.list = res.data
        this.resultList = res.data
      })
  },
  methods: {
    searchData() {
      this.resultList = []
      let set = new Set    //创建一个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.forEach

array.forEach(callbackFn(currentValue, index, arr), thisValue)

箭头函数 forEach((element, index, array) => { /* ... */ })

参数 描述
callbackFn(currentValue, index, arr) 必需。 数组中每个元素需要调用的函数。 函数参数:下图
thisValue 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值
参数 描述
currentValue 必需。当前元素
index 可选。当前元素的索引值。
arr 可选。当前元素所属的数组对象。

不支持continue、break,没有返回值,不改变原数组(尽管在回调中会改变原数组)

2.set去重

javascript 复制代码
const set = new Set()
set.add(1)   //在不重复的情况下添加
set.delete(1)  //删除
set.has(1) //存在,返回true
set.size  //长度

3.created

created是一个生命周期钩子函数,在Vue实例创建后立即调用,在函数中,我们可以进行一些初始化操作,如请求函数

4.动态渲染元素样式

html 复制代码
<div :style="{'background-color': 1 + 1 == 2 ? 'yellow' : ''}"></div>
相关推荐
foxhuli2291 分钟前
禁止ifrmare标签上的文件,实现自动下载功能,并且隐藏工具栏
前端
青皮桔33 分钟前
CSS实现百分比水柱图
前端·css
失落的多巴胺33 分钟前
使用deepseek制作“喝什么奶茶”随机抽签小网页
javascript·css·css3·html5
DataGear36 分钟前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
影子信息38 分钟前
vue 前端动态导入文件 import.meta.glob
前端·javascript·vue.js
青阳流月39 分钟前
1.vue权衡的艺术
前端·vue.js·开源
RunsenLIu40 分钟前
基于Vue.js + Node.js + MySQL实现的图书销售管理系统
vue.js·mysql·node.js
样子201843 分钟前
Vue3 之dialog弹框简单制作
前端·javascript·vue.js·前端框架·ecmascript
kevin_水滴石穿44 分钟前
Vue 中报错 TypeError: crypto$2.getRandomValues is not a function
前端·javascript·vue.js
翻滚吧键盘1 小时前
vue文本插值
javascript·vue.js·ecmascript