我正在使用谷歌地方自动完成指令: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

您可以输入地址,然后按Enter键 . 然后打开控制台 . 你会看见:

  • keydown

  • place_changed

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

  • place_changed

  • keydown

事件处理程序的顺序发生了变化 . 似乎谷歌搜索/ - 功能在某种程度上被打破,当谷歌加载一次,然后$状态改变,你再次尝试使用谷歌 .

此外,在dom中还有第二个.pac容器,我猜谷歌在某种程度上加载了两次或者什么,而控制器只是重新加载 .

你知道为什么会出现这种情况以及如何防止这种情况,或者你至少知道如何解决这个问题?我需要keydown才能在place_changed之前 . 谷歌搜索仍然可以在plnkr中运行,但它有点儿错误 . 我认为使用angularjs / $ state加载控制器/视图和指令等是一个问题 .

//编辑:

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