簡體   English   中英

有沒有辦法有條件地關閉控制器中的reloadOnSearch?

[英]Is there a way to conditionally turn off reloadOnSearch in a controller?

我有一個控制器,我有時使用$location.search({param1: newParam1Value)更新位置。

當我故意在控制器中更改$ location.search時,我想阻止重新加載。 否則,我想保留此路由/狀態的默認reloadOnSearch行為。

我在定義狀態時可以將reloadOnSearch設置為false,但它始終為false。

有沒有辦法從控制器內切換路徑的reloadOnSearch 或者,我可以保持reloadOnSearch: true並且只是阻止為我不希望它發生的一個實例重新加載其他方式嗎?

我正在使用ui.router

我需要相同的功能,這就是我想出的:

如其他地方所述,您需要在路由中轉換reloadOnSearch = false 但是大多數時候,你希望它像過去那樣行事,設置為true 你只想在某些情況下跳過。 所以我把它添加到我的控制器:

    $rootScope.skipNextSearchChangeReload = false;
    $scope.$on('$routeUpdate', function(){
        if (!$rootScope.skipNextSearchChangeReload) {
            $route.reload();
        } else {
            // skip reload, but reset to stop skipping
            $rootScope.skipNextSearchChangeReload = false;
        }
    });

    var updateSearchWithoutReload = function(key, values) {
        $rootScope.skipNextSearchChangeReload = true;
        $location.search(key, values);
    };

然后對網址的所有更改仍將像往常一樣重新加載。 但是當你想跳過重新加載時,你調用updateSearchWithoutReload(key, values); 它會跳過那個電話。 然后,在跳過之后,它將重置為不跳過重新加載。

我曾嘗試設置$rootScope.skipNextSearchChangeReload = true然后$location.search(k, v)然后$rootScope.skipNextSearchChangeReload = false ,但顯然事件沒有一直傳播, skipNextSearchChangeReload設置為false之前它跳過了。 所以這是我能想到的最好的。

是!! 你可以有條件地使用reloadOnSearch 我們知道使用$ location.search()事件重新加載狀態。 如果您的用例是這樣的,在某些情況下您想要重新加載狀態,而在其他情況下則不需要,然后使用reloadOnSearch如下所示:

$scope.myClickEvent = function () {
    // prevent a reload
    $state.current.reloadOnSearch = false;
    $location.search('page', 2);

    // Do your code...

   loadData();
}

/ * API調用加載數據* /

var function loadData() {
  // Do your code...

  // Allow to reload state
  $state.current.reloadOnSearch = undefined;
}

暫無
暫無

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

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