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

Angularjs 广播$locationChangeStart时从控制器调用方法,angularjs,button,location,back,Angularjs,Button,Location,Back,在我的控制器中,我根据地图的地理位置更改,使用不同的参数更改url。这是我的设置位置方法: $scope.setLocation = function(lat,lng){ $location.search('lat',lat); $location.search('lng',lng); $scope.$apply(); }; 我有另一种方法可以在地图上加载位置数据。这是我的getProjectsByCenter: $scope.getProjectsByCenter

在我的控制器中,我根据地图的地理位置更改,使用不同的参数更改url。这是我的设置位置方法:

$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更改,但当我单击“后退”按钮时,我不知道如何调用控制器的方法。“后退”按钮会更改$location,并调用以下广播侦听器。事实上,下面的广播侦听器每次调用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()...");
        }

    });

}]);
app.run(['$rootScope','$location',
函数($rootScope,$location){
//客户端安全。服务器端框架必须添加
//由于基于客户端的“安全性”很容易被黑客攻击,因此也拥有自己的安全性
$rootScope.$on(“$locationChangeStart”,函数(事件、下一个、当前){
if(next!==current&(hasbackbuttonbeinclicked()| | scopeFunctionWasNotCalled()){
//再次获取项目。
//$state.reload();

//$rootScope.$apply();您可以通过以下方式捕获更改事件。

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

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

希望这就是您想要的。

我不知道我可以在控制器本身中添加此侦听器。tlazocamatli。它执行其假设的操作,但与以前相同。当我的地图应用程序更改位置和浏览器更改位置时,会调用此回调函数。我只需要知道浏览器何时更改位置(后退按钮)正在更改。噢,ome!仅当位置更改时才应调用my getProjects函数。而不是调用my getProjects然后更改位置。您应该在
getProjectsByCenter
中注释位置更改片段。还应调用
getProjectsByCenter()
$routeChangeSuccess
事件中。这将满足您的要求。如果这有帮助,请接受此回答。