首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改选项时,Angular google地图未重新加载

更改选项时,Angular google地图未重新加载
EN

Stack Overflow用户
提问于 2021-06-01 19:09:54
回答 1查看 54关注 0票数 0

我正在尝试创建一个angular应用程序与角度护目镜地图组件。我的应用程序有一个暗光主题切换器。我已经创建了两种地图样式--一种是深色主题的夜色样式,另一种是浅色主题的轻色样式。当主题更改时,我更新地图选项以根据主题选择更改地图id。但是,它不会反映在贴图外观中。我的地图标记没问题。因此,我没有在这里添加这部分代码。另外,请注意,我在下面的代码中屏蔽了我的地图in。

我的地图组件ts

代码语言:javascript
复制
 @Input() position: GeolocationPosition;

  public markers: any[] = [];
  public options: google.maps.MapOptions;
  public mapId: string;

  private darkModeKey: string = "dark-mode";
  public themingSubscription: Subscription;

  constructor(
    private httpClient: HttpClient,
    private secretsService: SecretsService,
    private themingService: ThemingService,
    private storageService: StorageService,
  ) { }

  ngOnInit(): void {
    this.setMapOptions();

    this.loadMarkers();

    this.themingSubscription = this.themingService.theme.subscribe((theme: string) => {
      this.setMapOptions();
    });
  }

  private setMapOptions()
  {        
    this.options = {
      center: {
        lat: this.position.coords.latitude,
        lng: this.position.coords.longitude
      },
      zoom: 14,
      mapId: this.storageService.getItemByKey(this.darkModeKey) ?
        <dark-map-id> :
        <light-map-id>,
      maxZoom: 30,
      minZoom: 5,
    } as google.maps.MapOptions;
  }

html

代码语言:javascript
复制
<div>
  <google-map [options]="options" [width]="700" [height]="500" >
    <map-marker *ngFor="let marker of markers" [position]="marker.position" [label]="marker.label"
      [title]="marker.title" [options]="marker.options"></map-marker>
  </google-map>
</div>

我做错了什么?或者这是一些地图组件的问题?

EN

回答 1

Stack Overflow用户

发布于 2021-06-01 20:29:23

这可能是Angular不触发更改检测的问题,因为每次this.options更改时,变量引用都不会更改。因此,angular认为它是相同的值。

试一试

代码语言:javascript
复制
this.options = {...this.options,
      center: {
        lat: this.position.coords.latitude,
        lng: this.position.coords.longitude
      },
      zoom: 14,
      mapId: this.storageService.getItemByKey(this.darkModeKey) ?
        <dark-map-id> :
        <light-map-id>,
      maxZoom: 30,
      minZoom: 5,
    }

在创建原始this.options的副本时,以es6的方式更改对变量的引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67787748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档