Vue3使用vant检索组件van-search的坑

文章讨论了在Vue框架的van-search组件中,如何避免清空和检索按钮同时位于右侧导致的问题,建议将检索按钮移至左侧,并解决清空按钮点击无效以及样式冲突,通过CSS调整了按钮的位置和层叠属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当清空按钮与检索按钮同时居右时,点击clear清空按钮事件时会同时触发click-right-icon事件,如下配置:

<van-search
        v-model="form.search"
        show-action
        shape="round"
        left-icon=""
        right-icon="search"
        placeholder="请输入站点名称"
        @search="onClickSearch()"
        @clear="() => onClickSearch(true)"
        @click-right-icon="onClickSearch()"
      >
</van-search>

建议检索按钮放到左侧,防止与清空按钮出现同一侧。

且清空按钮点击无效,层叠样式排版有问题,需重新使用样式更改位置偏移

.van-field__body {
  .van-field__control[type='search'] {
    margin-right: 25px;
  }
  .van-field__control[type='search'] + .van-field__clear {
    position: absolute;
    right: 20px;
    z-index: 9999;
    width: 40px;
    flex-shrink: unset !important;
  }
}

### 使用 `van-field` 组件实现模糊搜索 在 Vue 中利用 Vant 的 `van-field` 和其他相关组件可以构建一个高效的模糊搜索功能。下面是一个完整的示例,展示了如何结合 `remoteMethod` 函数来执行基于关键词的异步数据过滤。 #### HTML 结构与绑定事件 首先,在模板部分定义好表单字段并为其设置监听器: ```html <template> <div class="search-container"> <!-- 输入框 --> <van-field v-model="query" placeholder="请输入查询关键字..." @input="handleQueryChange"/> <!-- 显示结果列表 --> <ul v-if="results.length > 0"> <li v-for="(item, index) in results" :key="index">{{ item.name }}</li> </ul> <!-- 加载提示符 --> <p v-else-if="loading">正在加载...</p> </div> </template> ``` #### JavaScript 方法逻辑 接着编写处理输入变化的方法,并调用远程接口获取匹配的数据项: ```javascript <script setup> import { ref } from &#39;vue&#39;; // 假设这是从服务器端获得的数据源 const deptListFilter = [ {"deptName": "研发部"}, {"deptName": "市场部"}, {"deptName": "财务部"} ]; let query = ref(&#39;&#39;); // 用户输入的内容 let loading = ref(false); // 是否处于加载状态 let results = ref([]); // 符合条件的结果集 function handleQueryChange(value){ if (value !== &#39;&#39;) { loading.value = true; setTimeout(() => { const filteredData = deptListFilter.filter((item) => item.deptName.includes(value) ); results.value = filteredData.map(({ deptName }) => ({ name: deptName })); loading.value = false; }, 200); } else { results.value = []; } } </script> ``` 此代码片段实现了当用户键入字符时触发 `@input` 事件处理器 `handleQueryChange()` ,该函数会根据当前输入值筛选部门名单中的条目[^3]。如果输入为空,则清空显示区域;反之则启动模拟延迟操作(这里用了 `setTimeout` 来模仿网络请求),之后更新视图上的选项集合。 为了使这个例子更贴近实际应用场景,建议替换掉静态数组 `deptListFilter` 并连接真实的 API 接口来进行实时检索
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杀猪刀-墨林

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

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

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

打赏作者

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

抵扣说明:

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

余额充值