当前位置: 首页 > news >正文

vue3中实现高德地图地址搜索自动提示(附源码)

Vue3 实现高德地图搜索自动提示功能

引言

上一篇文章详细讲解了如何在Vue3项目中集成高德地图🔗,本文将重点介绍地址搜索自动提示功能的实现。

1. 功能介绍

搜索提示(AutoComplete)是一种实时提示功能,当用户输入关键字时,可以智能地给出相关的提示信息,帮助用户快速找到目标位置。

2. 插件初始化

  1. 首先在插件列表中添加 AMap.AutoComplete
AMapLoader.load({plugins: ['AMap.AutoComplete'],// ... 其他配置
})
  1. 创建 AutoComplete 实例:
const autoComplete = new AMap.AutoComplete({input: "搜索输入框的ID",  // 绑定输入框city: "全国",            // 搜索范围,可以限定城市citylimit: false,       // 是否强制限制在设置的城市内搜索datatype: 'all',        // 返回的数据类型output: 'JSON'          // 返回的数据格式
});
  1. 监听选择事件:
autoComplete.on('select', function(e){// e.poi 包含选中的POI信息const poi = e.poi;console.log('选中的位置:', poi.name);console.log('经纬度:', poi.location);
});

3. 使用步骤

3.1 方法一 使用输入提示

调用autoComplete.search()方法检索匹配数据并渲染到下拉列表,便于灵活定制下拉样式。

//异步加载 AutoComplete 插件
AMap.plugin("AMap.AutoComplete", function () {var autoOptions = {//city 限定城市,默认全国city: "全国",};//实例化AutoCompletevar autoComplete = new AMap.AutoComplete(autoOptions);//根据关键字进行搜索 keyword 为搜索的关键词autoComplete.search(keyword, function (status, result) {//搜索成功时,result 即是对应的匹配数据console.log(result);});
});

3.2 方法二 使用输入提示插件的默认 UI

通过绑定输入框 ID 实现下拉提示功能。

AMap.plugin("AMap.AutoComplete", function () {var autoOptions = {input: "input_id", //"input_id"替换为输入框实际 id };var autoComplete = new AMap.AutoComplete(autoOptions);//无需再手动执行 search 方法,autoComplete 会根据传 input 对应的 DOM 动态触发 search
});

4. 综合案例

  1. 新增一个id为“input_id”的输入框
<template><div class="map-container"><div id="container"></div><div class="search-box"><inputtype="text"id="input_id"placeholder="请输入关键字搜索"class="search-input"/></div></div>
</template>
  1. 初始化地图
 map = new AMap.Map("container", {zoom: 10, //地图级别center: [116.397428, 39.90923], //地图中心点viewMode: "2D", //设置地图模式});
  1. 加载插件
 AMap.plugin("AMap.AutoComplete", function () {const autoOptions = {input: "input_id", //"input_id"替换为输入框实际 id};autoComplete = new AMap.AutoComplete(autoOptions);//无需再手动执行 search 方法,autoComplete 会根据传 input 对应的 DOM 动态触发 search});
  1. 完整代码
<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;
let autoComplete = null;
onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申请的安全密钥」",};AMapLoader.load({key: "", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {zoom: 10, //地图级别center: [116.397428, 39.90923], //地图中心点viewMode: "2D", //设置地图模式});AMap.plugin("AMap.AutoComplete", function () {const autoOptions = {input: "input_id", //"input_id"替换为输入框实际 id};//无需再手动执行 search 方法,autoComplete 会根据传 input 对应的 DOM 动态触发 searchautoComplete = new AMap.AutoComplete(autoOptions); //添加事件autoComplete.on("select", function (e) {// e.poi 包含选中的POI信息const poi = e.poi;console.log("选中的位置:", poi.name);console.log("经纬度:", poi.location);});});}).catch((e) => {console.log(e);});
});
onUnmounted(() => {map?.destroy();
});
</script><template><div class="map-container"><div id="container"></div><div class="search-box"><inputtype="text"id="input_id"placeholder="请输入关键字搜索"class="search-input"/></div></div>
</template><style>
#container {width: 100%;height: 800px;
}.map-container {position: relative;
}.search-box {position: absolute;top: 20px;right: 20px;z-index: 100;
}.search-input {width: 300px;height: 40px;padding: 0 15px;border: 1px solid #dcdfe6;border-radius: 4px;background-color: white;box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);font-size: 14px;transition: all 0.3s;
}.search-input:hover {border-color: #c0c4cc;
}.search-input:focus {outline: none;border-color: #409eff;box-shadow: 0 0 8px rgba(64, 158, 255, 0.2);
}.search-input::placeholder {color: #909399;
}
</style>
  1. 注意事项
    请填写您自己的 securityJsCodekey 以确保正常渲染。若不清楚如何申请 key,可参考这篇文章获取详细指引。如何在Vue3项目中集成高德地图🔗

效果图:
在这里插入图片描述
在这里插入图片描述

http://www.lqws.cn/news/553825.html

相关文章:

  • WHERE 子句中使用子查询:深度解析与最佳实践
  • 【论文阅读笔记】知网SCI——基于主成分分析的空间外差干涉数据校正研究
  • 【JavaSE】Comparable和Comparator接口
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 Flex 布局语法知识点及案例(27)
  • 华为云镜像仓库下载 selenium/standalone-chrome 镜像
  • 使用Docker安装MySQL和Nginx
  • 深入详解:随机森林算法——概念、原理、实现与应用场景
  • 8. 【Vue实战--孢子记账--Web 版开发】-- 账户账本管理
  • ESP-IDF中通过红外遥控RMT点亮WS2812(3)
  • web网页开发,在线%旅游景点管理%系统demo,基于Idea,vscode,html,css,vue,java,maven,springboot,mysql
  • 【Docker基础】Docker容器管理:docker top及其参数详解
  • 【力扣 中等 C】79. 单词搜索
  • HarmonyOS NEXT仓颉开发语言实战案例:图片预览器
  • 东南亚 TikTok 直播网络专线,专线助力告别直播画面卡顿时代
  • 某省职业院校技能大赛 高职组“信息安全管理与评估”赛项第二部分:应急响应
  • Word之空白页删除2
  • Note2.3 机器学习:Adaptive Learning Rate
  • 顺序表的常见算法
  • Qt 收藏夹书签管理
  • Qt的UDP接收过一段时间后就收不到数据,readyRead() 信号不触发的彻底解决方法
  • Python 数据分析:numpy,抽提,整数数组索引
  • 鸿蒙5:其他布局容器
  • 【大数据】HDFS分布式 机架感知
  • 学习笔记(C++篇)—— Day 8
  • Node.js特训专栏-实战进阶:10.MongoDB文档操作与聚合框架
  • 提示词优化神奇: PromptPilot是什么
  • NLog、log4net、Serilog 和 Microsoft.Extensions.Logging 四大 .NET 日志库的综合对比
  • 滑坡监测接收机市场分析
  • Uni-App 小程序面试题高频问答汇总
  • 电子电气架构 --- 车载芯片SOC简介