简体   繁体   中英

Implementation of google places using VueJs in Hybrid mobile application

I am trying to implement searching of google places using vue js in hybrid mobile application. Searching functionality is working fine but when I click on the list of the places I can't select any of them.

I have used vue-google-places library and vue-google-autocomplete library. In both libraries I am facing the same issue.

<template>
  <q-item>
    <q-item-main>
      <q-field :error="$v.serial.$error">
        <VueGooglePlaces
          api-key="api-key"
          class="subheading"
          :enable-geolocation="true"
          types="(cities)"
          @placechanged="onPlaceChanged"
        >
          <input
            ref="address"
            float-label="Serial Number"
            type="text"
            v-model="address"
            clearable
            @blur="$v.serial.$touch"
          />
        </VueGooglePlaces>

        <vue-google-autocomplete
          id="map"
          class="form-control"
          placeholder="Start typing"
          v-on:placechanged="getAddressData"
        ></vue-google-autocomplete>
      </q-field>
    </q-item-main>
  </q-item>
</template>

import VueGoogleAutocomplete from "vue-google-autocomplete";
import Vue from "vue";

export default {
  name: "ScanBarcodePage",
  components: {
    "page-title": PageTitleComponent
  },
  mounted() {
    if (this.$refs.address) {
      this.$refs.address.focus();
    }
  },
  data() {
    return {
      address: "",
      serial: "",
      places: []
    };
  },
  methods: {
    getAddressData: function(addressData, placeResultData, id) {
      this.address = addressData.formatted_address;
    },
    onPlaceChanged: function(addressData, placeResultData, id) {
      this.address = addressData.formatted_address;
    }
  }
}

I have added the sample code above. I am not getting any error but when I type some character in text field it shows list of places but I can't select any of them. But the same plugin is working fine for browser.

在此处输入图片说明

My guess is that these libraries are conflicting with each other due to calling the Maps API twice. Try implementing only one of them to rule this out.

Here's what I did to make vue-google-autocomplete work on mobile (Android) in a hybrid app via Apache cordova.

First some context here, I created a vue + cordova app via vue-cli-plugin-cordova .

In /public/index.html , add your Maps API script with a valid API key within the <head> element:

<script src="https://maps.googleapis.com/maps/api/js?key=KEY&libraries=places"></script>

Then go to /src/App.vue and replace all content with the code from the library's documentation's example :

<template>
    <div>
        <h2>Your Address</h2>

        <vue-google-autocomplete
            ref="address"
            id="map"
            classname="form-control"
            placeholder="Please type your address"
            v-on:placechanged="getAddressData"
            country="sg"
        >
        </vue-google-autocomplete>
    </div>
</template>

<script>
    import VueGoogleAutocomplete from 'vue-google-autocomplete'

    export default {
        components: { VueGoogleAutocomplete },

        data: function () {
            return {
              address: ''
            }
        },

        mounted() {
            // To demonstrate functionality of exposed component functions
            // Here we make focus on the user input
            this.$refs.address.focus();
        },

        methods: {
            /**
            * When the location found
            * @param {Object} addressData Data of the found location
            * @param {Object} placeResultData PlaceResult object
            * @param {String} id Input container ID
            */
            getAddressData: function (addressData, placeResultData, id) {
                this.address = addressData;
            }
        }
    }
</script>

Then plug in a device (or emulator) and run your app. You should be able to select a place from Autocomplete predictions without problem.

If you still can't, then check that your API key is in fact valid, ie it must be properly (un)restricted and belong to a Cloud project that has billing, JavaScript API & Places API enabled. More info in Google's guide here .

Really hope this helps you!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM