Angularjs 广播$locationChangeStart时从控制器调用方法
在我的控制器中,我根据地图的地理位置更改,使用不同的参数更改url。这是我的设置位置方法: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
$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
事件中。这将满足您的要求。如果这有帮助,请接受此回答。