首页 > 解决方案 > Angularjs UI-Router 状态更改更改 Google-API 指令的功能

问题描述

我正在使用 google 地方自动完成指令:vs-google-autocomplete

效果很好。问题是,如果我们更改 $state(通过后退/前进按钮,或者只是 ui-sref="testroute" 或 $state.go()),它会突然不像以前那样工作。

我设置了一个plnkr:

google.maps.event.addListener(autocomplete, 'place_changed', function() {
    console.log("place_changed");
});

google.maps.event.addDomListener(element[0], 'keydown', function(event) {
    if (event.keyCode == 13 || event.keyCode == 9)
        console.log("keydown");
});

http://plnkr.co/edit/wbhEWds1pY1bWrguV40U?p=preview

您可以输入一个地址,然后按回车键。然后打开控制台。你会看见:

  1. 按键
  2. place_changed

但是,如果您现在单击 route2,然后返回 route1,输入另一个地址并按 Enter 按钮,控制台将记录:

  1. place_changed
  2. 按键

事件处理程序的顺序发生了变化。似乎 google 搜索 / - 功能以某种方式损坏,当 google 加载一次时,$state 会发生变化,您再次尝试使用 google。

此外,在 dom 中还有第二个 .pac 容器,我猜 google 以某种方式加载了两次,而控制器刚刚重新加载。

您知道为什么会发生这种行为以及我如何防止这种情况发生吗?或者您是否至少知道如何解决这个问题?我需要 keydown 在 place_changed 之前。谷歌搜索在 plnkr 中仍然有效,但它有点错误。我认为这是加载控制器/视图和指令或其他东西的 angularjs/$state 的问题。

//编辑:

我想这不是 vs-google 指令或谷歌本身的问题,也许只是它们被启动的方式。vs-google 获取指令的元素并初始化其代码。因为 google-API 包含在 index.html 文件中,并且在状态更改时加载了一个指令,所以它似乎重新初始化了 DOM 元素或其他东西,但仍然只调用了一次该事件

标签: angularjsgoogle-apiangular-ui-routerstatedirective

解决方案


推荐阅读