vue+elementui实现百度地图关键词搜索,但不用地图

项目有个需求,在弹窗内需要一个输入框,输入地址调用百度地图api进行搜索,但是不需要用到地图。

在百度上找的资料全是需要地图的,这里提供一个解决方法,希望适用。

这是html

<div>
    <el-autocomplete
      style="width: 100%"
      v-model="address"
      popper-class="autoAddressClass"
      :placeholder="placeholder"
      :disabled="disabled"
      :fetch-suggestions="toSearch"
      :trigger-on-focus="false"
      clearable
      @select="handleSelect"
      @clear="clear"
    >
      <template slot-scope="{ item }">
        <i class="el-icon-search fl mgr10"></i>
        <div style="overflow: hidden">
          <div class="title">{{ item.name }}</div>
          <span class="address ellipsis">{{ item.address }}</span>
        </div>
      </template>
    </el-autocomplete>
  </div>

这是js

name: "MapAddress",
  data() {
    return {
      address: "",
      mapAddress: [],
    };
  },
  props: {
    city: {
      type: String,
      default: "长沙",
    },
    placeholder: {
      type: String,
      default: "请输入详细地址",
    },
    disabled: {
      type: Boolean,
      default: false,
    },
    value: {
      type: String,
      default: "",
    },
  },
watch: {
    value: {
      handler(val) {
        if (val != undefined && val != "") {
          this.address = val;
        }
      },
      deep: true,
      immediate: true,
    },
  },
  methods: {
    async toSearch(str, cb) {
      let that = this;
      await this.baidu_api_point(str, callbackData);
      function callbackData(data) {
        that.mapAddress = data.results;
        cb(that.mapAddress);
      }
    },
    handleSelect(item) {
      this.$emit("callbackMap", item.address);
    },
    clear() {
      this.$emit("callbackMap", "");
    },

这个解决跨域

baidu_api_point(path, callback) {
      //跨域调用百度api
      //注意这里挂载在了window上
      window.callbackData = callback;
      let url = `https://api.map.baidu.com/place/v2/search?query=${path}&region=${this.city}&page_size=20&output=json&ak=GwgzHwgqUGzFNZpRClR63mzn93RH0clK&callback=callbackData`;
      let fetchJsonp = function (url) {
        let body = document.getElementsByTagName("body")[0];
        //插入一个script
        let script = document.createElement("script");
        script.setAttribute("src", url);
        script.setAttribute("id", "mapApi");
        body.appendChild(script);
      };
      fetchJsonp(url);
   },

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值