1.table數據請求前記錄scrollTophtml
$scope.scrollPos = document.documentElement.scrollTop;
2.html中添加指令repeat-finishispa
<tr ng-repeat="item in lists" class="repeat-finish">
3.寫入指令rest
AppDirective.directive('repeatFinish', function () {
return {
restrict: "C",
link: function (scope, element, attr) {
if(scope.$last === true){
$(document).scrollTop(scope.scrollPos);
}
}
}
});
當指令檢測到DOM已經渲染好(scope.$last === true表示repeat渲染完成)當即恢復以前記錄的scrollTop,這樣從table加載好到恢復scrollTop就接近無延遲,閃爍的狀況消失了。code
注:若是有滾動條定位誤差(angular表達式編譯完成呈現視圖先後引發的折行,頁面高度會發生變化,因此定位有差異。雖然scope.$last === true表示了遍歷完成,可是頁面重繪並無完成,主要是數據綁定的顯示),在link裏面加個setTimeout();這是會閃爍一下;htm
閃爍這個現象暫時沒有找到完美的解決辦法,有大佬想到什麼辦法的話,歡迎@,E-mail: dxdleikai@163.comblog
指令修改成以下:element
AppDirective.directive('repeatFinish', function ($parse) {
return {
restrict: "CA",
link: function (scope, element, attr) {
if(scope.$last === true){
var watchLast = scope.$watch('lastHashKey', function(newValue, oldValue) {
$(document).scrollTop(scope.scrollPos);
});
scope.$on('$destroy', function() {
watchLast();
});
}
}
}
});
控制器須要在更新數據列表後添加:hash
$scope.lastHashKey = $scope.tableList[$scope.tableList.length - 1].$$hashKey)
完美解決it