AdvancedPlaceListElement 是一种 HTML 元素,用于根据地点资源名称在列表中呈现地点集合。
高级地点列表元素提供高级功能,包括自定义操作按钮、配置地点提供方信息和处理错误。
基本用法
如需使用该组件,请向网页添加 <gmp-advanced-place-list> 元素,并通过 places 属性传递以空格分隔的地点资源名称列表。
查看完整的代码示例
TypeScript
async function init() { await google.maps.importLibrary('places'); await customElements.whenDefined('gmp-advanced-place-list'); const listElement = document.querySelector('gmp-advanced-place-list'); if (listElement) { listElement.addEventListener('gmp-error', (e: Event) => { const customEvent = e as CustomEvent<{ errors?: unknown }>; console.error( 'Failed to load places: ', customEvent.detail.errors ?? customEvent ); }); } } void init();
JavaScript
async function init() { await google.maps.importLibrary('places'); await customElements.whenDefined('gmp-advanced-place-list'); const listElement = document.querySelector('gmp-advanced-place-list'); if (listElement) { listElement.addEventListener('gmp-error', (e) => { const customEvent = e; console.error( 'Failed to load places: ', customEvent.detail.errors ?? customEvent ); }); } } void init();
CSS
html, body { height: 100%; margin: 0; padding: 0; font-family: Roboto, Arial, sans-serif; }
HTML
<!doctype html>
<html>
<head>
<title>Advanced Place List</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY",
v: "beta"
});
</script>
</head>
<body>
<gmp-advanced-place-list
places="places/ChIJLU7jZClu5kcR4PcOOO6p3I0 places/ChIJrRMgU7ZhLxMRxAOFkC7I8Sg places/ChIJbf8C1yFxdDkR3n12P4DkKt0 places/ChIJPTacEpBQwokRKwIlDXelxkA places/ChIJVVVViV-abZERJxqgpA43EDo">
<template slot="details-item">
<gmp-place-name></gmp-place-name>
<gmp-place-address></gmp-place-address>
<gmp-place-media query="coffee"></gmp-place-media>
</template>
</gmp-advanced-place-list>
</body>
</html>高级功能
自定义操作按钮
在高级地点列表组件的 <template slot="details-item"> 元素内添加操作按钮作为子级。使用 <gmp-place-link> 进行标准导航连接,并明确指定 action 属性。您可以选择指定 slot 属性。有效的预定义操作包括 open-website、open-directions、open-map 和 call。如果省略 slot 属性,则该属性默认为 action-main。
<gmp-advanced-place-list places="places/ChIJT7FdmYiAhYAROFOvrIxRJDU">
<template slot="details-item">
<gmp-place-name></gmp-place-name>
<gmp-place-link action="open-website" target="_blank"></gmp-place-link>
<gmp-place-link action="open-directions" slot="action-corner"></gmp-place-link>
</template>
</gmp-advanced-place-list>配置地点提供方信息
如需配置视觉效果提供方信息,请添加 <gmp-place-attribution> 元素以显示总体 Maps API 数据提供方信息配置,例如照片或评价的来源。
必须将其添加为 <template> 的直接同级元素。
放置在 <template> 元素内的提供方信息将被忽略。
<gmp-advanced-place-list places="places/ChIJT7FdmYiAhYAROFOvrIxRJDU">
<template slot="details-item">
<gmp-place-name></gmp-place-name>
</template>
<gmp-place-attribution light-scheme-color="black" dark-scheme-color="gray"></gmp-place-attribution>
</gmp-advanced-place-list>处理错误
您可以监听 gmp-error 事件,以便在一个或多个请求的地点无法加载时妥善处理相应情况。
const listElement = document.querySelector('gmp-advanced-place-list'); listElement.addEventListener('gmp-error', (e) => { // e.detail.errors contains an array of failure objects with specific failed Resource Names console.error('Failed to load places: ', e.detail.errors); });