vue2+高德地图web端开发(二)

news2025/1/20 22:03:06

前言:

高德地图输入提示与 POI 搜索相关文档:输入提示与 POI 搜索-服务插件和工具-进阶教程-地图 JS API 2.0 | 高德地图API (amap.com)

输入提示-输入提示-示例中心-JS API 2.0 示例 | 高德地图API (amap.com)

创建输入框:

引入Element组件库:

关于引入element可以看我的这篇文章:Vue框架中引入Element-UI组件库-CSDN博客

 

引入输入框组件

components文件夹下创建Search.vue:

<template>
  <div id="search">
    <el-input placeholder="请输入内容" v-model="input" clearable> </el-input>
  </div>
</template>

<script>
export default {
  data() {
    return {
      input: "",
    };
  },
};
</script>

<style>
#search {
  position: relative;
  margin-left: auto;  
  margin-right: auto;  
  top:30px;
  width: 600px;
}
</style>

在MapContainer.vue的plugins中引入’AMap.PlaceSearch’控件

官网上有相关的教程:输入提示与 POI 搜索-服务插件和工具-进阶教程-地图 JS API 2.0 | 高德地图API (amap.com)

AMap.AutoComplete输入提示插件,可以实现在输入框里输入文本片段即显示相关的匹配信息。

输入提示插件支持设置搜索限制条件,比如:传入要搜索的 POI 类型(type)和城市(city)等参数,搜索完成后用户可获取到对应的查询结果。

利用输入提示插件获取匹配信息需要以下代码实现:

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

通常情况下,开发者需要根据表单控件事件的触发来执行AMap.AutoComplete的search()方法,并将返回结果绘制成 DOM 显示到页面上。为了帮助开发者节省时间、提升效率,高德 JS API 还提供了一套默认的 UI 来自动在页面相应的表单控件上监听输入并显示匹配结果。如果你需要使用此功能,请按照下面代码示例编写即可:

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

由官网的相关教程可知,修改MapView.vue代码为 :

将autoOption与Search.vue中的input绑定

关于组件之间的传递请看我的这篇文章:Vue组件之间的传递通信-CSDN博客

我们使用事件总线进行传递:

新建eventbus文件夹,在文件夹下新建event-bus.js文件

写入:

import Vue from 'vue'; 
export const EventBus = new Vue();

引入:

MapView.vue中

Search.vue中 

 将Search.vue表单进行双向绑定以及动态id还有input监听

这里的id也可以不设置为动态,直接将id写给autoOptions,这个我们后面再说

 

在methods中定义方法 send。这个方法会在输入框的值发生变化时被调用(由 @input 事件触发)

在 send 方法中,使用了一个名为 EventBus 的事件总线(从 ../eventbus/event-bus 导入)来发出一个名为 "shareUserInput" 的事件,并传递 inputId 作为参数。

注意mounted生命周期钩子一定要有,要不然只会传值 ,不能挂载到 DOM

(我是这么理解的,一开始没写 mounted,运行一直不对)

Search.vue全部代码: 

<template>
  <div id="search">
    <el-input
      type="text"
      placeholder="请输入内容"
      v-model="userInput"
      :id="inputId"
      clearable
      @input="send"
    ></el-input>
  </div>
</template>

<script>
import { EventBus } from "../eventbus/event-bus";
export default {
  data() {
    return {
      userInput: "",
      inputId: "seachInput",
    };
  },
  methods: {
    send() {
      EventBus.$emit("shareUserInput", this.inputId);
    },
  },
  mounted() {
    this.send();//初始化,让其他组件知道这个搜索输入框组件已经被加载并准备好接受用户输入了。
  },
}
</script>

<style>
#search {
  position: relative;
  margin-left: auto;
  margin-right: auto;
  top: 30px;
  width:600px;
}
</style>

在MapView.vue中 

当组件被创建时,created() 钩子被调用。在 created() 钩子中,设置了一个事件监听器来监听 "shareUserInput" 事件,接收到传递的数据,handleEvent 方法新 this.autoOptions.input 的值。

 最后创建一个实例就成功了

this.auto = new AMap.AutoComplete(this.autoOptions);  

MapView.vue全部代码:

<template>
  <div id="container"></div>
</template>

<script>
import { EventBus } from "../eventbus/event-bus";
import AMapLoader from "@amap/amap-jsapi-loader";
window._AMapSecurityConfig = {
  securityJsCode: "安全密钥",
};
export default {
  data() {
    return {
      map: null,
      autoOptions: {
        input: ""
      },
      auto: null,
    }
  },
  created() {
    EventBus.$on("shareUserInput", (data) => this.handleEvent(data));
  },
  methods: {
    handleEvent(data) {
      this.autoOptions.input = data;
      console.log(this.autoOptions.input)
    },
    initMap() {
      AMapLoader.load({
        key: "", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: [
          "AMap.ToolBar",
          "AMap.Scale",
          "AMap.ControlBar",
          "AMap.HawkEye",
          "AMap.MapType",
          "AMap.AutoComplete",
        ],
      })
        .then((AMap) => {
          this.map = new AMap.Map("container", {
            //设置地图容器id
            resizeEnable: true,
            viewMode: "3D", //是否为3D地图模式
            zoom: 10, //初始化地图级别
            center: [121.473667, 31.230525], //初始化地图中心点位置
          });

          this.auto = new AMap.AutoComplete(this.autoOptions);         
          // 添加比例尺控件
          this.map.addControl(new AMap.Scale());

          // 添加工具栏控件
          this.map.addControl(new AMap.ToolBar());

          // 添加地图类型切换控件
          this.map.addControl(new AMap.MapType());

          this.map.addControl(new AMap.HawkEye());

          this.map.addControl(new AMap.ControlBar());

          // 其他地图初始化代码...
        })
        .catch((e) => {
          console.log(e);
        });
    },
  },
  mounted() {
    //DOM初始化完成进行地图初始化
    this.initMap();
  },
};
</script>

<style scoped>
#container {
  padding: 0px;
  margin: 0px;
  width: 100%;
  height: 100%;
  position: absolute;
}
</style>

补充一个小tip

mounted() 生命周期钩子不是一定需要的,它取决于你的应用逻辑和组件的需求。mounted() 钩子函数主要用于执行那些需要在 DOM 渲染完成后才能进行的操作,比如发起网络请求、订阅事件、操作 DOM 元素等。

如果您发现没有 mounted() 钩子函数,组件的运行不一样,这可能是因为您的应用逻辑依赖于某些在 mounted() 中执行的初始化操作。例如,如果您在 mounted() 中发起了一个网络请求来获取数据,并在获取到数据后更新组件的状态,那么没有 mounted() 钩子函数,这个数据获取和状态更新的操作就不会发生,从而影响到组件的渲染和行为。

另外,如果您在 send() 方法中发送的是一个事件,用于通知其他组件或实例进行某些操作(比如更新状态、渲染内容等),那么没有 mounted() 钩子函数,这个事件就不会在组件挂载时发送,可能会影响到其他组件或实例的行为。

因此,是否需要使用 mounted() 钩子函数,取决于您的应用逻辑和组件的需求。如果您的组件需要在挂载后执行某些操作,那么就需要使用 mounted() 钩子函数。如果不需要,则可以省略它。但是,如果您的应用逻辑依赖于 mounted() 中执行的某些操作,而您又没有实现这个钩子函数,那么组件的行为就可能会与预期不符。


 当然当然,还有极其简单的方法,直接将输入框 的id写入autoOptions中,都不需要那些杂七杂八的什么事件总线啥的(我也是后来才发现,本来以为不同组件之前的id是需要传递的)

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

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

相关文章

Selenium Grid分布式测试环境搭建

Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的&#xff0c;而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息&#xff0c;并且接受远程客户端代码的请求调用&#xff0c;然后把请求的命令转发给代理节…

猫头虎分享:一文带你搞懂什么是SaaS、PaaS、LaaS、CaaS、FaaS、MBaaS

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

拿捏c语言指针(中)

前言 书接上回 拿捏c语言指针&#xff08;上&#xff09; 此篇主要讲解的是指针与数组之间的爱恨情仇&#xff0c;跟着我的脚步一起来看看吧~ 创造不易&#xff0c;可以帮忙点点赞吗 如有差错&#xff0c;欢迎指出 理解数组名 数组名是首元素地址 例外 1.sizeof&#xff0…

《苍穹外卖》知识梳理P11-Apache POI导出报表

一.Apache POI 可以通过Apache POI处理excel文件&#xff0c;核心操作是读和写 应用场景 银行网银交易明细各种业务系统导出Excel报表批量导入业务数据 使用步骤 1.导入maven坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi&…

萝卜大杂烩 | 把微信接入ChatGPT,变成聊天机器人竟然这么简单!(一起来尝试吧~)

本文来源公众号“萝卜大杂烩”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;把微信接入ChatGPT&#xff0c;变成聊天机器人竟然这么简单&#xff01; 最近的 ChatGPT 又再次火热起来了&#xff0c;各种周边工具也是层出不穷&…

力扣72. 编辑距离(动态规划)

Problem: 72. 编辑距离 文章目录 题目描述思路复杂度Code 题目描述 思路 由于易得将字符串word1向word2转换和word2向word1转换是等效的&#xff0c;则我们假定统一为word1向word2转换&#xff01;&#xff01;&#xff01; 1.确定状态&#xff1a;我们假设现在有下标i&#x…

SQL补充2:数据库的增操作

数据库的增操作 数据库的增操作主要涉及数据库的增加、数据表的增加、表记录增加以及表字段增加等&#xff1a; 数据库的增加非常简单&#xff0c;就是新创建一个数据库&#xff1b;表记录的增加指的就是新增表的数据行&#xff0c;可以是在已有表的基础上增加记录&#xff0…

菜刀HTTPTCP后门分析+防范

本文由掌控安全学院 - aj545302905 投稿 “菜刀”对于渗透测试者来说耳熟能详&#xff0c;但是大家用的菜刀真的安全吗&#xff1f;你能保证你所使用的工具不会被别人偷偷的塞入后门吗&#xff1f; 如果菜刀中被塞入后门 那我们岂不是成了别人的苦力。辛辛苦苦打下的shell就这…

简单介绍数据结构的基本概念

数据结构的基本概念 常用术语 数据 数据&#xff08;Data&#xff09;是客观事物的符号表示&#xff0c;是所有能输入到计算机中并被计算机程序处理的符号的总称。例如&#xff1a;整数、字符串、图形、图像、声音和动画等 数据元素 数据元素&#xff08;Data Element&…

基于SSM的宁夏旅游网站平台(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的宁夏旅游网站平台&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring …

解决updatexml和extractvalue查询显示不全

报错注入是一种常见的SQL 注入方式&#xff0c;通过注入代码&#xff0c;触发数据库的错误响应&#xff0c;并从错误信息中获取有用的信息。 updatexml和extractvalue updatexml和extractvalue 是常用的两个报错注入函数 http://localhost/sqli/Less-5/?id1%27and%20updat…

树莓派登录方式

目录 1.串口登录树莓派 1.1 USB-TTL连接树莓派串口 1.2 修改系统配置&#xff0c;启用串口登录树莓派 1.3 启动树莓派 2.网络方式登录树莓派 2.1 使树莓派接入网络 2.2 网络SSH 方式登录树莓派 2.2.1 打开ssh功能&#xff0c; 输入命令&#xff1a; 1.串口登录树莓派 1…

循环语句及对应练习

一、循环语句 echo命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符 选项作用\r光标移至行首&#xff0c;并且不换行\s当前shell的名称&#xff0c;如bash\t插入Tab键&#xff0c;制表符\n输出换行\f换行&#xff0c;但光标仍停留在原处\表示插入“\”本身…

OpenAI视频生成模型Sora的全面解析:从扩散Transformer到ViViT、DiT、NaViT、VideoPoet

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0、W.A.L.T》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来&#xff0c;不…

IO进程线程day1作业

1、使用fgets统计给定文件行数 代码&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, const char *argv[]) {if(argc ! 2){printf("inputs file error\n");printf("usage:./a.out filename\n&quo…

ruoyi低版本shiro反序列化解决

解决方式如下&#xff1a; 方案一.升级shiro至最新版本方案二.保持shiro版本不变,修改rememberMe默认密钥,改为自定义密钥获取 com.msunsoft.framework.config.ShiroConfig: 将其改为以下内容: // 设置cipherKey密钥Value("${shiro.cookie.cipherKey}")private Str…

有关光猫、路由器、交换机、网关的理解

前提 在了解计算机网络的过程中&#xff0c;出现了这四个名词&#xff1a;光猫、路由器、交换机、网络。有点模糊&#xff0c;查阅互联网相关资料&#xff0c;进行整理。如有错误&#xff0c;欢迎大家批评指正。 光猫 首先光猫是物理存在的&#xff0c;大家在家里应该都可以…

『 C++ 』海量数据处理

文章目录 &#x1f996; 快速找出海量数据中是否存在该整型数据&#x1f996; 有限内存情况下两个文件(海量query)中找出交集&#x1f996; 海量数据中找出只出现1次的数据&#x1f996; 有限内存情况下两个文件(整型)找出交集&#x1f996; 海量数据中找出出现次数不超过2次的…

CleanMyMac X好不好用?如何下载2024最新版本

CleanMyMac X是一款好用的系统优化软件&#xff0c;具有简洁的界面和多样的功能&#xff0c;能够支持系统垃圾、图片、邮件、iTunes清理&#xff0c;移除恶意软件&#xff0c;优化系统和释放多余空间等。 CleanMyMac X全新版下载如下: https://wm.makeding.com/iclk/?zoneid4…

Python算法题集_随机链表的复制

Python算法题集_随机链表的复制 题138&#xff1a;随机链表的复制1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【字典哈希】3) 改进版二【单层哈希】4) 改进版三【递归大法】 4. 最优算法 本文为Python算法题集之一的…