广播$ locationChangeStart时从控制器调用方法

时间:2014-11-18 20:53:20

标签: angularjs button location back

在我的控制器中,我使用不同的参数更改了网址,具体取决于地图的地理位置更改。这是我的setLocation方法:

$scope.setLocation = function(lat,lng){
   $location.search('lat',lat);
   $location.search('lng',lng);
   $scope.$apply();
};    

我有另一种方法可以在地图上加载位置数据。这是我的getProjectsByCenter:

$scope.getProjectsByCenter = function(){
   var center = getProjectsByCenter();
   $scope.setLocation(center.lat(),center.lng());
};

一旦位置开始更改,浏览器会在其历史记录中保存所有这些URL更改,但是当我单击后退按钮时,我无法弄清楚如何调用控制器的方法。后退按钮确实更改$位置,并调用以下广播侦听器。事实上,每次我使用setLocation()时都会调用以下广播监听器,但在这种情况下,一切都正常工作。

app.run(['$rootScope', '$location',
function ($rootScope, $location) {

    //Client-side security. Server-side framework MUST add it's 
    //own security as well since client-based “security” is easily hacked
    $rootScope.$on('$locationChangeStart', function (event, next, current) {

        if( next !== current && (hasBackButtonBeenClicked() || scopeFunctionWasNotCalled()) ){
            // fetch project again.
            // $state.reload();
            // $rootScope.$apply(); <--- doesn't work
            console.log("location has changed...now find a way to call controller's $scope.getProjectsByCenter()...");
        }

    });

}]);

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式捕获更改事件。

在目标网页中添加此控制器。以下方法将捕获更改事件,您应该能够触发控制器。

.controller('MyController', function() {
    $scope.$on('$routeChangeSuccess', function () {
        // Do your work
    });
})

希望这就是你要找的东西。