AngularJS $位置无法与google.maps.event侦听器一起使用

时间:2015-03-26 19:57:02

标签: javascript angularjs google-maps

我在angularJS控制器中初始化一个谷歌地图,并为地图事件添加一个监听器

google.maps.event.addListener(map, 'dragend', MapMoveAround);
......
function MapMoveAround() {
    console.log($location.url());
    $location.path('/other_path');
    console.log($location.url());
}

当我触发谷歌地图事件时,控制台显示网址已更改,但我留在旧页面。如果我将$ location.path('/ other_path')更改为

window.location.replace('/#/other_path')

它将进入新页面,但“后退”按钮将无效。

任何人都可以为它提供AngularJS解决方案吗?

2 个答案:

答案 0 :(得分:1)

通过事件运行角度代码不会运行摘要周期,在这种情况下,您需要使用$scope.$apply()手动运行它才能使$location更改工作。

<强>代码

google.maps.event.addListener(map, 'dragend', MapMoveAround);
......
function MapMoveAround() {
    console.log($location.url());
    $scope.$apply(function(){
      $location.path('/other_path');
    })
    console.log($location.url());
}

答案 1 :(得分:0)

以下代码也适用于......

 google.maps.event.addListener(map, 'dragend', MapMoveAround);
......
function MapMoveAround() {
  console.log($location.url());
  $timeout(function() {
    $location.path('/other_path');
  }, 500)
  console.log($location.url());
}