SvelteKit 中的 Google API 自动完成

juj*_*nho 1 html binding google-api sveltekit

我正在构建一个应用程序,我需要从 API 获取返回值并将其绑定到我的变量。我已经被这个问题困扰了好几天了,无法继续下去。

这是我的代码:

<script>
  let address = "";
async function addExample() {
        const response = await fetch(
            "https://api",
            {
                method: "PUT",
                headers: {
                    "api-key":
                        "api-key",
                },
                body: JSON.stringify({
                    address: address,           
                }),
            }
        );
    }
</script>


<svelte:head>
    <script
        src="https://maps.googleapis.com/maps/api/js?key=my-key&libraries=places&callback=initAutocomplete"
        async
        defer
    >
    </script>

    <script>
        let autocomplete;
        function initAutocomplete() {
            const input = document.getElementById("autocomplete");
            const options = {
                componentRestrictions: { country: "au" },
                strictBounds: false,
            };
            const autocomplete = new google.maps.places.Autocomplete(
                input,
                options
            );
        }

        autocomplete.addListener("place_changed", onPlaceChanged);

        function onPlaceChanged() {
            address = autocomplete.getPlace();
        }
    </script>

</svelte:head>

<input
                    id="autocomplete"
                    placeholder="address"
                    type="text"
                    bind:value={address}
                /><br />
Run Code Online (Sandbox Code Playgroud)

我尝试将我的标签添加到标签svelte:headscript,但它不起作用,除其他尝试外,由于我缺乏经验,我希望我是否以正确的方式执行此操作,而不是在这方面浪费更多时间。PS:我现在不需要创建地图或类似的东西。我只想将自动完成的值绑定到我的变量,这样我就能够将数据提取到数据库中。

我已经尝试了所有我能在谷歌上找到的东西,但没有一个成功。我对这一切都很陌生,我不知道还能想什么/尝试什么。

ant*_*nyk 7

我也无法弄清楚如何从 访问变量svelte:head。对我有用的是使用 Google Maps JS API 加载器,而不是将脚本放在svelte:head. 这适用于那些想要使用Google Places 自动完成功能的预构建自动完成小部件的人。

要安装,请运行:

npm i @googlemaps/js-api-loader
Run Code Online (Sandbox Code Playgroud)

然后在您的 中+page.svelte,您可以使用onMount来加载它。

<script>
import { onMount } from 'svelte';
import { Loader } from '@googlemaps/js-api-loader';

let autocomplete;
let address;

const options = {
    componentRestrictions: { country: 'au' },
    strictBounds: false
    };


onMount(() => {
  const loader = new Loader({
    apiKey: 'GOOGLE_MAPS_API_KEY',
    version: 'weekly',
    libraries: ['places']
    });

  loader.loadCallback((e) => {
    if (e) {
      console.log(e);
    } else {
      autocomplete = new google.maps.places.Autocomplete(
      document.getElementById('autocomplete'),
      options
    );

    autocomplete.addListener('place_changed', onPlaceChanged);
    }
});

  function onPlaceChanged() {
    address = autocomplete.getPlace();

    console.log(address.formatted_address);
    }
});
</script>

<input type="text" name="autocomplete" id="autocomplete" autocomplete="off" />
<pre>{JSON.stringify(address)}</pre>

Run Code Online (Sandbox Code Playgroud)