typescript - Google Places-bibliotekswidget som använder JS API-loader i Angular


Jag försöker skapa ett adressinmatningsfält med hjälp av Google Places-biblioteket. Jag vill använda google-js-api-loader istället för en script-tagg, men jag verkar inte få det att fungera. Här är min kod hittills:

adress-autocomplete.component.html

<input
  id="autocomplete"
  type="text"
  pInputText
  [(ngModel)]="inputAddress"
  [style]="{ width: '15rem' }"
/>

adress-autocomplete.component.ts

import {} from "@angular/google-maps";
import { Loader } from "@googlemaps/js-api-loader";

@Component({
  selector: "app-address-autocomplete",
  templateUrl: "./address-autocomplete.component.html",
  styleUrls: ["./address-autocomplete.component.scss"],
})
export class AddressAutocompleteComponent implements OnInit {
  inputAddress = "London";
  autocomplete!: google.maps.places.Autocomplete;
  constructor() {}

  ngOnInit() {
    const loader = new Loader({
      apiKey: "API_KEY", // 
      version: "weekly",
      libraries: ["places"],
    });
    loader.load().then((google) => {
      this.autocomplete = new google.maps.places.Autocomplete(
        document.getElementById("autocomplete") as HTMLInputElement
      );
      console.log(this.autocomplete);
//Gs {setTypes: function, setComponentRestrictions: function, getPlace: function, getBounds: function, …}
      console.log(this.autocomplete.getPlace());
//undefined
    });
  }
}

Jag satte det initiala värdet på inmatningsfältet, men det returnerar fortfarande undefined även om autocomplete-variabeln innehåller Autocomplete-objektet. Jag missar troligen något uppenbart. Tack på förhand. Redigering: stavning

Svar #1

Jag letade efter ett bibliotek för att hantera adressautokomplettering, jag har använt din kod och ändrat den lite, försök att hantera det på detta sätt:

loader.load().then((google) => {
        const autocomplete = new google.maps.places.Autocomplete(
            autoCompleteNativeElementRef
        );
        google.maps.event.addListener(autocomplete, 'place_changed', () =>  {
                const place = autocomplete.getPlace();
                console.log(place);
        });
    });