为 <agm-marker> 设置自定义属性以进行过滤?
Set custom properties for <agm-marker> for filtering?
我在 agm 地图上显示了一组 agm 标记,如下所示:
<agm-map [latitude]="mapCenterLatitude" [longitude]="mapCenterLongitude" [zoom]="getMapZoom()" [mapTypeId]="'hybrid'">
<agm-marker-cluster maxZoom="13" imagePath="https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/markerclustererplus/images/m">
<agm-marker *ngFor="let marker of markers" [latitude]="marker.latitude" [longitude]="marker.longitude" [iconUrl]="marker.iconUrl">
<agm-info-window>
<h2>{{marker.title}}</h2>
<a routerLink="{{ marker.url }}">Details</a>
</agm-info-window>
</agm-marker>
</agm-marker-cluster>
</agm-map>
现在我希望能够按类别过滤它们。单击类别复选框应使所有不属于该类别的标记不可见。
如何将此类别添加到标记中?有没有办法添加自定义属性(这在纯 Google 地图 API 中是可能的)?
我认为您可以向标记对象添加一个新的 属性。您有一个标记数组,这些对象具有属性 latitude
、longitude
、iconURL
...
您可以为这些标记添加新属性:
for (let marker of markers) {
marker.customProperty = 'my value'
}
然后在您的 html 模板中过滤它们。例如,您可以使用 filter 函数或创建另一个可以在 TypeScript 文件中过滤的数组来执行此操作。我会选择第一个选项:
<agm-map [latitude]="mapCenterLatitude" [longitude]="mapCenterLongitude" [zoom]="getMapZoom()" [mapTypeId]="'hybrid'">
<agm-marker-cluster maxZoom="13" imagePath="https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/markerclustererplus/images/m">
<agm-marker *ngFor="let marker of markers.filter(item => item.customProperty === 'desiredProperty)" [latitude]="marker.latitude" [longitude]="marker.longitude" [iconUrl]="marker.iconUrl">
<agm-info-window>
<h2>{{marker.title}}</h2>
<a routerLink="{{ marker.url }}">Details</a>
</agm-info-window>
</agm-marker>
</agm-marker-cluster>
</agm-map>
这样就可以了。
P.D。
如果因为明确使用 agm-marker class 而无法创建自定义 属性,则可以不定义标记数组的类型(将其设置为 any
)或创建您的扩展 agm-marker class 的自定义 class。
希望这会有所帮助!
正如 zolastro 指出的那样,您可以简单地向标记添加属性。然后我在标记的 [visible] 属性 上设置了条件,如果过滤器不匹配则使其不可见。
<agm-map [latitude]="mapCenterLatitude" [longitude]="mapCenterLongitude" [zoom]="getMapZoom()" [mapTypeId]="'hybrid'">
<agm-marker-cluster maxZoom="13" imagePath="https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/markerclustererplus/images/m">
<agm-marker *ngFor="let marker of markers"
[latitude]="marker.latitude"
[longitude]="marker.longitude"
[iconUrl]="marker.iconUrl"
[visible]="marker.category == 'categoryA'">
<agm-info-window>
<h2>{{marker.title}}</h2>
<a routerLink="{{ marker.url }}">Details</a>
</agm-info-window>
</agm-marker>
</agm-marker-cluster>
</agm-map>
我在 agm 地图上显示了一组 agm 标记,如下所示:
<agm-map [latitude]="mapCenterLatitude" [longitude]="mapCenterLongitude" [zoom]="getMapZoom()" [mapTypeId]="'hybrid'">
<agm-marker-cluster maxZoom="13" imagePath="https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/markerclustererplus/images/m">
<agm-marker *ngFor="let marker of markers" [latitude]="marker.latitude" [longitude]="marker.longitude" [iconUrl]="marker.iconUrl">
<agm-info-window>
<h2>{{marker.title}}</h2>
<a routerLink="{{ marker.url }}">Details</a>
</agm-info-window>
</agm-marker>
</agm-marker-cluster>
</agm-map>
现在我希望能够按类别过滤它们。单击类别复选框应使所有不属于该类别的标记不可见。
如何将此类别添加到标记中?有没有办法添加自定义属性(这在纯 Google 地图 API 中是可能的)?
我认为您可以向标记对象添加一个新的 属性。您有一个标记数组,这些对象具有属性 latitude
、longitude
、iconURL
...
您可以为这些标记添加新属性:
for (let marker of markers) {
marker.customProperty = 'my value'
}
然后在您的 html 模板中过滤它们。例如,您可以使用 filter 函数或创建另一个可以在 TypeScript 文件中过滤的数组来执行此操作。我会选择第一个选项:
<agm-map [latitude]="mapCenterLatitude" [longitude]="mapCenterLongitude" [zoom]="getMapZoom()" [mapTypeId]="'hybrid'">
<agm-marker-cluster maxZoom="13" imagePath="https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/markerclustererplus/images/m">
<agm-marker *ngFor="let marker of markers.filter(item => item.customProperty === 'desiredProperty)" [latitude]="marker.latitude" [longitude]="marker.longitude" [iconUrl]="marker.iconUrl">
<agm-info-window>
<h2>{{marker.title}}</h2>
<a routerLink="{{ marker.url }}">Details</a>
</agm-info-window>
</agm-marker>
</agm-marker-cluster>
</agm-map>
这样就可以了。
P.D。
如果因为明确使用 agm-marker class 而无法创建自定义 属性,则可以不定义标记数组的类型(将其设置为 any
)或创建您的扩展 agm-marker class 的自定义 class。
希望这会有所帮助!
正如 zolastro 指出的那样,您可以简单地向标记添加属性。然后我在标记的 [visible] 属性 上设置了条件,如果过滤器不匹配则使其不可见。
<agm-map [latitude]="mapCenterLatitude" [longitude]="mapCenterLongitude" [zoom]="getMapZoom()" [mapTypeId]="'hybrid'">
<agm-marker-cluster maxZoom="13" imagePath="https://raw.githubusercontent.com/googlemaps/v3-utility-library/master/markerclustererplus/images/m">
<agm-marker *ngFor="let marker of markers"
[latitude]="marker.latitude"
[longitude]="marker.longitude"
[iconUrl]="marker.iconUrl"
[visible]="marker.category == 'categoryA'">
<agm-info-window>
<h2>{{marker.title}}</h2>
<a routerLink="{{ marker.url }}">Details</a>
</agm-info-window>
</agm-marker>
</agm-marker-cluster>
</agm-map>