有没有一种方法可以清除 Angular JS 在通过加载特定视图时存储的历史记录routeProvider
?
我正在使用 Angular 创建一个公共安装,并且历史会积累很多,所以我想在加载主页时清除它。
有没有一种方法可以清除 Angular JS 在通过加载特定视图时存储的历史记录routeProvider
?
我正在使用 Angular 创建一个公共安装,并且历史会积累很多,所以我想在加载主页时清除它。
在你的控制器中注入 $scope 和 $location。
$scope.$on('$viewContentLoaded', function(){
//view loaded do some stuff.
$location.replace(); //clear last history route
});
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];
}
在控制器中,我添加了一个更改视图的函数:
$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
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, '');
};