5

有没有一种方法可以清除 Angular JS 在通过加载特定视图时存储的历史记录routeProvider

我正在使用 Angular 创建一个公共安装,并且历史会积累很多,所以我想在加载主页时清除它。

4

4 回答 4

11

在你的控制器中注入 $scope 和 $location。

$scope.$on('$viewContentLoaded', function(){
  //view loaded do some stuff.
    $location.replace(); //clear last history route
});
于 2014-07-09T16:10:31.260 回答
1
 for(var a=0; a < $rootScope.$viewHistory.histories.root.stack.length; a++ ){
         console.log(" for history remove " + a );
         delete $rootScope.$viewHistory.histories.root.stack[a];
     }
于 2014-10-18T11:17:22.723 回答
0

在控制器中,我添加了一个更改视图的函数:

$scope.changeView = function(view) {
    $location.path(view);
    $location.replace();
}

然后在视图中我添加了一个 ng-click 来调用这个函数:

<div ng-click="changeView('/app/new_view')">

从角度文档 $location.replace() 方法用于替换历史堆栈中的最顶层视图,而不是添加新视图。

有一种特殊的replace方法可以用来告诉 $location 服务,下次 $location 服务与浏览器同步时,应该替换最后一条历史记录,而不是创建一个新记录。

参考: https ://docs.angularjs.org/guide/ $location

于 2013-10-08T12:03:51.653 回答
0
var dummyState = {app: 'resto'};

// set up history state
if (!$window.history.state) {
  $window.history.pushState(dummyState, '');
}

// when history back
$window.onpopstate = function() {
  console.log('window.onpopstate:url=', $window.location.href);
  console.log('window.onpopstate:history.state=', $window.history.state);

  // repopulate history state so we get the popstate event again
  $window.history.pushState(dummyState, '');
};
于 2015-07-26T08:45:43.247 回答