angularjs - 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
您可以输入一个地址,然后按回车键。然后打开控制台。你会看见:
- 按键
- place_changed
但是,如果您现在单击 route2,然后返回 route1,输入另一个地址并按 Enter 按钮,控制台将记录:
- place_changed
- 按键
事件处理程序的顺序发生了变化。似乎 google 搜索 / - 功能以某种方式损坏,当 google 加载一次时,$state 会发生变化,您再次尝试使用 google。
此外,在 dom 中还有第二个 .pac 容器,我猜 google 以某种方式加载了两次,而控制器刚刚重新加载。
您知道为什么会发生这种行为以及我如何防止这种情况发生吗?或者您是否至少知道如何解决这个问题?我需要 keydown 在 place_changed 之前。谷歌搜索在 plnkr 中仍然有效,但它有点错误。我认为这是加载控制器/视图和指令或其他东西的 angularjs/$state 的问题。
//编辑:
我想这不是 vs-google 指令或谷歌本身的问题,也许只是它们被启动的方式。vs-google 获取指令的元素并初始化其代码。因为 google-API 包含在 index.html 文件中,并且在状态更改时加载了一个指令,所以它似乎重新初始化了 DOM 元素或其他东西,但仍然只调用了一次该事件
解决方案
推荐阅读
- android-studio - Android Studio 没有检测到已经在运行的虚拟设备/模拟器
- reporting-services - 迁移的 SSRS 报表服务器共享计划 2008 R2 到 2016 - 不按字母顺序
- excel - 仅当新日期与当前日期至少相差一个月时,是否有一种更优雅的方式来执行 if 语句?
- paypal - Paypal 支付集成在印度可用
- pentaho - 如何(1)在一定行数后浓缩成一行;(2) 如何分配字段名
- google-apps-script - 在 Google Apps 脚本中处理多个条件
- python - 无法在 SQLite DB 上执行 UPDATE 语句:数据库已锁定
- javascript - Vue 只呈现第一个自定义组件问题
- sql - 使用 SSDT 在 SQL Server 中删除重复项的方法
- mongodb - 如何将集合“日期”值更新为 YYYY-MM-DD?