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

When transitioning IU Router states with Google maps on uiGmapIsReady picks up previous map not the new one

我正在使用 UI 路由器和 UI Google 地图。

根据文档,我应该使用 uiGmapIsReady 来了解地图是否可以在页面上使用。这在孤立的情况下效果很好。但是,当从一个页面过渡到另一个页面时,两个页面上都存在地图时,就会出现问题。

主要问题似乎是 uiGmapIsReady 被旧地图而非新地图的数据立即触发。我可以通过将一张地图更改为 "satellite" 然后切换到新页面来证明这一点。新页面默认是路线图,但是uiGmapIsReady曝光的地图有卫星类型!

我尝试了很多方法,但似乎没有任何效果。我尝试订阅 uiGmapIsReady 只有一个 $viewContentLoaded$stateChangeSuccess 事件已被触发,但不幸的是它们触发得太早了。

在深入研究源代码后,我找到了解决这个问题的方法

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

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

最后你只需要获取数组中的最后一张地图,因为它永远是最新的。