在我的控制器中,我使用不同的参数更改了网址,具体取决于地图的地理位置更改。这是我的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()...");
}
});
}]);
有什么建议吗?
答案 0 :(得分:2)
您可以通过以下方式捕获更改事件。
在目标网页中添加此控制器。以下方法将捕获更改事件,您应该能够触发控制器。
.controller('MyController', function() {
$scope.$on('$routeChangeSuccess', function () {
// Do your work
});
})
希望这就是你要找的东西。