arco.design 利用 a-input-search 和 a-trigger 自己实现一个关键字查询select

news2024/10/7 5:53:42
先看效果

在这里插入图片描述

<div class="search-content" id="map-search-wrapper">
 <a-trigger
    popup-visible
    position="bl"
    autoFitPopupWidth
    :popup-offset="4"
    :unmount-on-close="true"
    trigger="click"
    popup-container="#map-search-wrapper"
  >
    <a-input-search
      v-model="keyword"
      :style="{ width: '280px' }"
      placeholder="输入位置搜索"
      search-button
      allow-clear
      @input="onInputInput"
      @search="onInputSearch"
    >
      <template #button-icon>
        <icon-search size="12" />
      </template>
    </a-input-search>
    <template #content>
      <a-scrollbar style="height: 296px; overflow: auto" v-if="placeList?.length > 0">
        <div class="search-result">
          <div class="place-list">
            <div class="place-item" v-for="(place, index) in placeList" :key="index" @click="onPlaceItemClick(place)">
              <div class="place-item-content">
                <span class="place-name">
                  <PlaceColorName :name="place.name" :keyword="keyword" />
                </span>
                <span class="place-district">{{ place.district }}</span>
              </div>
            </div>
          </div>
        </div>
      </a-scrollbar>
    </template>
  </a-trigger>
</div>

难点:

问题:triggerContent 的 宽度需要和 trigger 的宽度保持一致
解决:autoFitPopupWidth属性,此属性在官方文档中并未书写,但看源码可以找到这个属性,其功能正好适合此场景

问题:如何实现在搜索大悦时,西单大悦城中大悦二字标黄
解决:利用正则实现,PlaceColorName.js 组件实现如下

import { h } from 'vue'

/**
 * 分割字符串并标注关键词
 * @param {string} targetStr - 目标字符串
 * @param {string} keyword - 关键字
 * @returns {string[]} 返回一个数组,其中目标字符串被分割,并用 "关键字" 标注
 */
function splitAndMarkKeyword(targetStr, keyword) {
  // 如果 keyword 中有正则表达式的关键字,则进行转义
  const escapeKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
  const regex = new RegExp(`(${escapeKeyword})`, 'gi') // 创建一个全局忽略大小写的正则表达式来匹配关键字
  let match
  let result = []
  let lastIndex = 0

  while ((match = regex.exec(targetStr)) !== null) {
    // 添加关键字前的部分
    if (match.index > lastIndex) {
      result.push(targetStr.slice(lastIndex, match.index));
    }
    // 添加关键字
    result.push(`${match[0]}`)
    lastIndex = match.index + match[0].length
  }

  // 添加剩余部分
  if (lastIndex < targetStr.length) {
    result.push(targetStr.slice(lastIndex))
  }

  return result
}

export default function (value) {
  const name = value.name
  const keyword = value.keyword
  const nameStrs = splitAndMarkKeyword(name, keyword)
  return h(
    'span',
    {},
    nameStrs.map((item) => {
      if (item == keyword) {
        return h('span', { style: { color: '#FF874F' } }, item)
      } else {
        return item
      }
    })
  )
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1864636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一年前端|17K|极光推送5轮面经

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 背景 渣本毕业&#xff0c;学历一般中文系出身&#xff0c;非科班大四转行&#xff0c;总体基础不行一年工作年限&#xff0c;项目毫无亮点&#x…

智慧互联:Vatee万腾平台展现科技魅力

随着科技的迅猛发展&#xff0c;我们的生活正逐渐变得智能化、互联化。在这个信息爆炸的时代&#xff0c;一个名为Vatee万腾的平台正以其独特的魅力&#xff0c;引领我们走向一个更加智能的未来。 Vatee万腾&#xff0c;这个名字本身就充满了对科技未来的憧憬与期待。作为一家专…

抖音外卖服务商入驻流程及费用有哪几种?申请不通过怎么办?

随着多家互联网大厂布局的不断深入&#xff0c;本地生活的市场前景和收益潜力逐渐展现了在人们眼前&#xff0c;连带着其重点板块之一的外卖市场也成为了众多资本和创业者的重点关注对象。在此背景下&#xff0c;抖音外卖的正式开放&#xff0c;更是将本就火热的本地生活和外卖…

技术回顾:冷却风机

每天一篇行业发展资讯&#xff0c;让大家更及时了解外面的世界。 更多资讯&#xff0c;请关注B站/公众号【莱歌数字】&#xff0c;有视频教程~~ 在这一期中&#xff0c;我们的重点是冷却应用中使用的冷却风扇在电子热管理。这些专利显示了不同发明者所关注的一些显著特征。 带…

【windows】win11系统跳过联网和微软账户登录,实现本地账户登录

问题原因&#xff1a;现在市面上销售的品牌笔记本和台式机基本上都预装了正版的Windows S11家族中文版操作系统&#xff0c;联网后系统会自动激活。在win11的版本中&#xff0c;隐藏了关闭跳过连接网络的按钮&#xff0c;默认强制需要注册微软账户登录才能正常使用。 一、跳过…

Windows 10 11 Install Docker-Desktop

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker-compose Compose 是用于定义和运行…

基于React18+Appwrite实现类似Instagram的社交APP

源码地址&#xff1a;https://github.com/sikichan/Ins-social-media-app 请给我一个Star ⭐️ 谢谢&#xff01;

数据结构——跳表Skip List

本文对跳表的定义、实现、应用等进行简单总结。 一、 介绍 1.定义 跳表&#xff08;Skip List&#xff09;&#xff1a;是一种概率性数据结构&#xff0c;由William Pugh在1990年提出&#xff0c;主要用于在有序的元素集合上进行快速的搜索、插入和删除操作。跳表的效率与平衡…

AD手动添加网络

AD手动添加网络&#xff0c;&#xff08;用于不画原理图直接画PCB用&#xff09;一看就懂_ad不用原理图画pcb-CSDN博客https://blog.csdn.net/feifeiccode/article/details/107198441#:~:text%E6%B7%BB%E5%8A%A0%E8%A6%81%E6%B7%BB%E5%8A%A0%E7%9A%84%E7%BD%91%E7%BB%9C,%E6%8C…

12个RAG常见痛点及解决方案

Barnett等人的论文《Seven Failure Points When Engineering a Retrieval Augmented Generation System》介绍了RAG的七个痛点&#xff0c;我们将其延申扩展再补充开发RAG流程中常遇到的另外五个常见问题。并且将深入研究这些RAG痛点的解决方案&#xff0c;这样我们能够更好地在…

【Vue】集成富文本编辑器

这文章使用的是wangeditor插件&#xff0c;官网地址&#xff1a;wangEditor&#xff0c;这个比较简单 安装 npm i wangeditor --save 使用 <div id"editor"></div>import E from "wangeditor"const editor new E("#editor") e…

qt 打开pdf 三种方式

1.openurl是一种方式 11 12行 2.qprocess是一种 23 24 25行 3.这个fk项目的插件实现的 但是这个插件有点复杂 里面有很多继承 我没看懂具体每一层跳转逻辑 但是使用没有问题

VMware Workstation搭建Windows Server2019主备AD域控详细操作步骤

版本 虚拟机版本 VMware Workstation 16 Prp 16.2.5 build-20904516 服务器系统版本 具体操作 安装第一台虚拟机服务器 首先先创建一台Windows Server2019虚拟机&#xff0c;可以参考VMware Workstation安装Windows Server2019系统详细操作步骤-CSDN博客 克隆第一台虚拟机…

1.k8s:架构,组件,基础概念

目录 一、k8s了解 1.什么是k8s 2.为什么要k8s &#xff08;1&#xff09;部署方式演变 &#xff08;2&#xff09;k8s作用 &#xff08;3&#xff09;Mesos&#xff0c;Swarm&#xff0c;K8S三大平台对比 二、k8s架构、组件 1.k8s架构 2.k8s基础组件 3.k8s附加组件 …

基于springboot+vue的梦幻玩具乐园的设计与实现(在线购物平台)

需要源码和论文的小伙伴可以私信博主&#xff08;有偿&#xff09; ​​​​​课题目的与意义 随着互联网的不断普及与在线销售平台的迅猛发展&#xff0c;在线购物日益受到广大消费者的青睐与追捧。通过构建基于Spring BootVue的在线玩具商城&#xff0c;可以为玩具制造商、…

STM32之三:中断外部中断

目录 1. 什么是中断 1.1 中断概念 1.2 中断优先级 1.3 中断嵌套 2.STM32中断 2.1 NVIC中断优先级 3 外部中断 3.1 EXTI简介 3.2 EXTI中断/事件线 3.3 EXTI功能框图 3.4 中断和事件的区别&#xff1f; 3.5 什么时候用外部中断&#xff1f; 3.怎么使用STM32中断 3.…

1、Python编程入门:从硬件基础到解释器类型

Python是一种免费、开源、跨平台、动态、面向对象的编程语言。它以其简洁易读的语法和强大的功能而闻名&#xff0c;广泛应用于各种领域&#xff0c;如Web开发、数据分析、人工智能等。本文将介绍Python的基本概念、执行方式以及常用的Linux命令&#xff0c;帮助初学者快速入门…

用英文介绍伦敦:London The Empire MEGACITY

London: The Empire MEGACITY Link: https://www.youtube.com/watch?vZM7TBKD3a5U London is the capital of the United Kingdom and was the world’s largest city until 1925. Once the center of the massive British Empire, it is now a mature, well-planned metrop…

基于高度的纹理混合shader

基于高度的纹理混合shader 原文&#xff1a;基于高度的纹理混合shader - 知乎 (zhihu.com) 最近支持一个使用unity2021的项目&#xff0c;发现urp自带的Terrain/Lit shader已经自带高度混合了&#xff0c;看了下和我当初写的那个基本差不多&#xff0c;感觉稍微要比我的严谨一…

刷代码随想录有感(118):动态规划——打家劫舍II

题干&#xff1a; 代码&#xff1a; class Solution { public:int solve(vector<int>& nums, int start, int end){if(start end)return nums[start];if(nums.size() 0)return 0;if(nums.size() 1)return nums[0];vector<int>dp(nums.size(), 0);dp[start]…