下面是另一种版本的 keep-scroll-pos 指令。这个版本
html 使用示例:
<div ng-view keep-scroll-pos></div>
keepScrollPos 指令的代码如下:
“严格使用”;
angular.module("myApp.directives", [])
.directive("keepScrollPos", function($route, $window, $timeout, $location, $anchorScroll) {
// 缓存每个路由的 templateUrl 的滚动位置
var scrollPosCache = {};
// 编译函数
返回函数(范围,元素,属性){
scope.$on('$routeChangeStart', function() {
// 存储当前视图的滚动位置
如果($route.current){
scrollPosCache[$route.current.loadedTemplateUrl] = [ $window.pageXOffset, $window.pageYOffset ];
}
});
scope.$on('$routeChangeSuccess', function() {
// 如果显式指定了哈希,则它胜过先前存储的滚动位置
如果 ($location.hash()) {
$anchorScroll();
// 否则获取上一个滚动位置;如果没有,滚动到页面顶部
} 别的 {
var prevScrollPos = scrollPosCache[$route.current.loadedTemplateUrl] || [ 0, 0 ];
$超时(功能(){
$window.scrollTo(prevScrollPos[0], prevScrollPos[1]);
}, 0);
}
});
}
});
要忽略先前存储的滚动位置,并强制滚动到顶部,请使用伪哈希标签:#top,例如 href=" #/home#top "。
或者,如果您更喜欢始终滚动到顶部,请使用内置的 ng-view自动滚动选项:
<div ng-view autoscroll></div>