vue3.2 setup 腾讯选址组件以及定位当前位置

第一步:要在index.html里插入

第二步
父组件:在父组件实现当前定位功能,然后点击上报来源,弹出子组件选址。
这里用到了 vant的 van-popup 包裹子组件。
用子组件的ref=LocationSon 去获取子组件暴漏的值,要配合watchEffect

      <li class="item" @click="onShowEventSources((showEventSources = true))">
        <div class="text">上报来源</div>
        <div class="info">
          <p :class="EventSourcesText != '请选择' ? 'selected' : ''">
            {{ EventSourcesText }}
          </p>
          <van-icon name="arrow" />
        </div>
      </li>

   <van-popup
    closeable
    close-icon="close"
    v-model:show="showMap"
    position="bottom"
    :style="{ height: '90%' }"
  >
       <Location ref="LocationSon" />
  </van-popup>

<script setup>
import {
  ref,
  onMounted,
  watchEffect,
  nextTick,
} from "vue";
// 定位 S
const LocationSon = ref("");
const showMap = ref(false);
const locationText = ref("");
const onMap = () => {
  showMap.value = true;
};
watchEffect(() => {
  locationText.value = LocationSon.value["locText"] || "点击定位";
});
onMounted(() => {
  nextTick(() => {
    initMap();
  });
});
let initMapIdx = 0;
const initMap = () => {
  if (!window.qq.maps && initMapIdx < 10) {
    setTimeout(() => {
      initMapIdx += 1;
      initMap();
    }, 500);
    return false;
  }
  const geolocation = new window.qq.maps.Geolocation(
    "申请的腾讯地图key", // 申请的腾讯地图key(必填)
    "网格管理系统" // 申请的腾讯地图key名称(非必填,最好填一下)
  );
  // 回调的第一次参数为成功后具体的位置信息
  geolocation.getLocation(
    (postion) => {
      console.log("成功", postion);
      // alert(JSON.stringify(postion))
      // onComplete(postion);
    },
    (err) => {
      console.log("定位失败", err);
    }
  );
};
// 定位 A

第三步:子组件
先编辑到这,有空了在组织语言 先看代码吧


<template>
  <div class="locationWrap">
    <iframe
      id="mapPage"
      width="100%"
      height="100%"
      frameborder="0"
      src="https://apis.map.qq.com/tools/locpicker?key=IBUBZ-NZ7CX-NL44H-Z7K5I-H6KAJ-RYF74&search=1&type=1&referer=myapp"
    >
    </iframe>
  </div>
</template>
<script setup>
import { reactive, ref, onMounted, watchEffect, onBeforeUpdate } from "vue";
import NavBar from "@/components/NavBar";
import getSrc from "@/utils/getSrc";
import localStorageEx from "@/utils/localStorageEx";
import { Toast } from "vant";
const locationText = ref("");
const locText = ref("");
onMounted(() => {
  window.addEventListener(
    "message",
    function (event) {
      // 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息
      var loc = event.data;
      if (loc && loc.module == "locationPicker") {
        //防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'
        Toast("选中成功");
        locText.value = `${loc.poiaddress} ${loc.poiname}`;
      }
    },
    false
  );
});
watchEffect(() => {
  locText.value = locText.value;
});
defineExpose({
  locText,
});
</script>

<style lang="scss">
.locationWrap {
  margin-top: 50px;
  height: calc(100vh - 90px);
}
</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值