在uiGmapIsReady上使用Google地图转换IU路由器状态时,会选择上一张地图而不是新地图

时间:2016-08-18 13:13:50

标签: angular-ui-router angular-promise angular-google-maps

我正在使用UI路由器和用户界面谷歌地图。

根据文档,我应该使用uiGmapIsReady来了解地图是否可以在页面上使用。这在隔离方面很有效。但是当从一个页面转换到另一个页面时,两个页面上都存在地图问题。

主要问题似乎是uiGmapIsReady会立即被OLD地图的数据而不是新地图的数据触发。我可以通过将一个地图更改为“卫星”然后切换到新页面来证明这一点。默认情况下,新页面是路线图,但uiGmapIsReady公开的地图有一种卫星!

我尝试过很多东西,但似乎没什么用。我曾尝试订阅uiGmapIsReady只有一个$viewContentLoaded$stateChangeSuccess事件已被解雇,但不幸的是它们很快就会发生。

1 个答案:

答案 0 :(得分:0)

在深入了解源代码后,我想出了如何解决这个问题

this.uiGmapIsReady
    .promise(this.uiGmapIsReady.instances() + 1)
    .then((mapInstances: any[]) => {
        var map: google.maps.Map = mapInstances[mapInstances.length - 1].map;
    });

您传递给承诺的数字是您期望的地图实例的数量。如果数字错误,那么承诺将不会返回。因此,您必须使用instances()来告诉您当前的计数并向其添加1(这是您的新页面将创建的地图数量)。

最后,您只需要获取数组中的最后一张地图,因为它始终是最新的地图。