Vue中实现搜索功能(树形和列表):

1、树形搜索:

数据格式:
data:[
	{name:'...',age:'...',},
	{
		name:'...',
		age:'...',
		vList:{
			name:'...',
			age:'...',
			vList:{
				name:'...',
				age:'...',
			}
		}
	},
	{name:'...',age:'...',},
}

后端接口:

POST 	/menueList
参数:
searchName   searchName

前端处理接口:

export function menueList (obj) {
  return request({
    url:'/api/menueList',
    method: 'post',
    params: obj
  })
}

前端页面:

 <div class="treebox">
            <!-- 新增搜索功能 -->
            <div class="searchInput">
              <el-input
                type="text"
                placeholder="请输入设备名称搜索"
                class="inputClass"
                v-model="searchName"
                @input="searchVideo"
              ></el-input>
            </div>

            <div style="padding:5px 40px;">
              <el-tree
                :data="treeData"
                ref="tree"
                default-expand-all   //让文件展开
              >
              </el-tree>
            </div>
          </div>
export default {
	methods:{
		searchVideo(val) {//搜索功能
      		menueList({searchName:val}).then(res => {
         		const { data } = res.data;
         		this.treeData = [data];
     		})
     }
}

2、列表搜索:

后端接口:

查询详情 
GET     		/check/{id}

参数名称    		请求类型
id      		path

前端处理接口:

export function getCheck(params){
	return request({
		url:'/api/check/{id}',
		method:'get',
		params
	})
}

前端页面:

<el-form size="small" @kayup.enter.native="getList()">
	<el-form-item>
		<el-input placeholder="请输入名称搜索" clearable v-model="dataForm.search"></el-input >
	</el-form-item>
	<el-form-item>
		<el-button type="primary" @click="getList">搜索</el-button>
	</el-form-item>
</el-form>
import {getCheck} from "@/api/..."
methods:{
	getList(val){//搜索功能
		if(!this.dataFrom.search){
			this.$message.wraning("请输入搜索的内容")
			return
		}
		let params={//把需要传的参数传给后端
			id:this.dataFrom.id,
			param:this.dataFrom.search.toString(),
			pageNum:this.dataFrom.current,
			pageSize:this.dataFrom.size,
		}
		//  let params={...this.dataFrom}
		getCheck(params).then((res)=>{
			if(res.data.code==0){
				this.$message.success('搜索成功')
			}
			this.getDataList()  //重新调用列表数据
		})
	}
}

3、模糊搜索:

template:
	<el-input type="text" style="margin:10px;width:80%;"
		 v-model="videoName" @input="searchVideo"
         placeholder="输入设备名称搜索">
    </el-input>
    <ul>
        <li
           draggable="true"
           title="item.dwmc"
           :key="index"
           @dragstart="drapStart(item,index)"
           @click="getVideoUrl(item,index)"
           :class="{ztColor:spanIndex.indexOf(index) > -1}"
           v-for="(item,index) in videoList"
           >
        </li>
   </ul>

data:
	videoList: [],
    allList: [],
	
methods:
	init(){
		videoObj().then(res => {
          //this.videoList = res.data.data;
          this.allList = res.data.data;
          this.videoList = [...this.allList]
        })
	},
    searchVideo(val) {
        if (val == '') {
          this.videoList = this.allList;
          return
        }
        let ary = [];
        this.videoList.filter(item => {
          if (item.dwmc.indexOf(val) != -1) {
            ary.push(item)
            console.log(ary);
          }
        })
        this.videoList = ary;
        console.log(this.videoList);
      },
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面我将给出一个基于 Vue树形搜索功能的代码示例。 首先,我们需要构建一个树形结构,这里我用一个简单的数据示例: ```javascript const treeData = [ { id: 1, name: '国', children: [ { id: 2, name: '北京', children: [ { id: 3, name: '朝阳区' }, { id: 4, name: '海淀区' } ] }, { id: 5, name: '上海', children: [ { id: 6, name: '浦东新区' }, { id: 7, name: '徐汇区' } ] } ] }, { id: 8, name: '美国', children: [ { id: 9, name: '纽约', children: [ { id: 10, name: '曼哈顿' }, { id: 11, name: '布鲁克林' } ] }, { id: 12, name: '旧金山', children: [ { id: 13, name: '金门公园' }, { id: 14, name: '旧金山湾' } ] } ] } ] ``` 接着,我们可以创建一个 Vue 组件来表示每一个节点: ```html <template> <div> <span>{{ node.name }}</span> <ul v-if="node.children"> <tree-node v-for="child in node.children" :key="child.id" :node="child" :keyword="keyword" @search="search" ></tree-node> </ul> </div> </template> <script> export default { name: 'TreeNode', props: { node: { type: Object, required: true }, keyword: { type: String, default: '' } }, methods: { search(keyword) { this.$emit('search', keyword) } } } </script> ``` 在上面的代码,我们使用递归组件来自动渲染子节点。每个节点包含一个名称和一个子节点数组,可以通过 props 来传递。同时,我们还添加了一个名为 `keyword` 的 prop 用于接收搜索关键字。在组件内部,我们使用 `v-if` 指令来判断是否存在子节点,并使用 `v-for` 指令循环渲染子节点。 接下来,我们需要在页面添加一个搜索框和一个搜索结果展示区: ```html <template> <div> <div> <input type="text" v-model="searchKeyword" /> <button @click="search">搜索</button> </div> <div v-if="searchResult.length"> <ul> <li v-for="node in searchResult" :key="node.id"> {{ node.name }} </li> </ul> </div> <div v-else>未找到匹配节点</div> <div> <tree-node v-for="node in treeData" :key="node.id" :node="node" :keyword="searchKeyword" @search="search" ></tree-node> </div> </div> </template> <script> import TreeNode from './TreeNode.vue' export default { name: 'TreeSearch', components: { TreeNode }, data() { return { treeData: [ // 树形结构数据 ], searchKeyword: '', searchResult: [] } }, methods: { search() { this.searchResult = [] this.treeData.forEach(node => { this.searchNode(node) }) }, searchNode(node) { if (node.name.includes(this.searchKeyword)) { this.searchResult.push(node) } if (node.children) { node.children.forEach(child => { this.searchNode(child) }) } } } } </script> ``` 在上面的代码,我们首先引入了之前定义的 `TreeNode` 组件,并使用 `v-for` 指令循环渲染树形结构。同时,我们添加了一个搜索框和一个搜索按钮,用户可以输入关键字并点击按钮进行搜索。在搜索方法,我们使用 `Array.prototype.forEach()` 方法遍历整个树形结构,并递归搜索每个节点,如果节点的名称包含关键字,则将该节点添加到搜索结果列表。最后,我们在页面使用 `v-if` 指令来判断是否存在搜索结果,并使用 `v-for` 指令渲染搜索结果列表。 这样,一个简单的树形搜索功能实现了。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sun Peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值