簡體   English   中英

AngularJS - $ window.history.back()的成功回調

[英]AngularJS - Success Callback for $window.history.back()

在我的應用程序中,它以編程方式返回到前一個URL的后退按鈕。 這是我做的:

$window.history.back();

現在,在更改為上一個url(控制器/模板完全加載)后,我想執行一些代碼。 我如何聽取$ window.history.back()的成功? 我想實現它滾動到與以前完全相同的位置。 我需要這樣做,因為我希望滾動一般在事件$stateChangeSuccess但如果sb。 回到后退按鈕它應該回到滾動位置(正常列表 - 詳細信息 - 視圖 - >如果sb進入詳細視圖並返回列表,滾動位置應該與之前相同)。 不幸的是, 不起作用,因為在加載完整的控制器/視圖之前調用它。

編輯

我的計划如下。 在運行功能中:

var lastScrollPosition = 0;
$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
    lastScrollPosition = $(window).scrollTop();
    $("html, body").animate({
        scrollTop: 0
    }, 0);
});

$rootScope.backButton = function() {
    $window.history.back().then(function() {
        $("html, body").animate({
            scrollTop: lastScrollPosition
        }, 0);
    });
};

因此,如果狀態改變了滾動位置被保存,那就有效。 如果按下后退按鈕,則會調用backButton 執行$window.history.back() Command之后,我想調用Success-Function並跳轉到保存的滾動位置 - > tbd如何實現此功能。

從另一個方面來看,這可能更容易:將滾動位置恢復作為$ stateChangeSuccess的默認行為(帶有分配給每個州的最后滾動位置的地圖,在$ stateChangeStart上更新),並處理用戶點擊鏈接案件分開,因為你可以更好地控制這些案件。

使用ng-click='go(state, params)'替換任何ui-sref ,具有全局go函數,該函數只是翻轉一個標志,指示您將要在$ stateChangeSuccess回調中滾動到頂部。

var scrollPositions = {};

$rootScope.go = function gotoState(state, params, options) {
   $rootScope.scroll_to_top = true;
   $state.go(state, params, options);
}

$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
    $("html, body").animate({
        scrollTop: !$rootScope.scroll_to_top && scrollPositions[toState] || 0
    }, 0);
    $rootScope.scroll_to_top = false;
});


$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
    scrollPositions[fromState] =  $(window).scrollTop();
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM