2014-03-06 40 views
8

我有一个控制器,我有时使用$location.search({param1: newParam1Value)更新位置。有没有办法在控制器中有条件地关闭reloadOnSearch?

当我故意改变控制器中的$ location.search时,我想阻止重新加载。否则,我想保留此路由/状态的默认reloadOnSearch行为。

我可以将reloadOnSearch设置为false,当我定义状态但它总是假的。

有没有办法从控制器内切换reloadOnSearch的路线?或者,我是否可以保留reloadOnSearch: true,并防止在我不希望发生这种情况的一个实例中重新加载其他方式?我正在使用ui.router

+0

见http://stackoverflow.com/questions/19137504/force-angularjs-to-reload-a-route-although-option-reloadonsearch-is-set-to-false –

+0

我想做与那篇文章中描述的完全相反 – Justin

+0

这是一样的。您需要挂钩$ routeUpdate,并委托给$ route.reload(),除非您更新路由... –

回答

1

无法直接从路由配置模块执行此操作。相反,你必须在你的控制器手动设置在路由配置reloadOnSearch: false和处理路线重装,比如:

app.controller('MyCtrl', function ($rootScope, $route){ 
    var reloadOnSearch = true; //set reloadOnSearch within controller 
    $rootScope.$on('$routeUpdate', function(){ 
    if (shouldReload) { 
     $route.reload(); 
    } 
    }); 
}); 
1

我需要这个相同的功能,这里就是我想出了:

正如所叙述的,您需要在路线中转入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); 
    }; 

然后到URL的所有变化仍然会重新如常。但是当你想跳过重新加载时,你可以拨打updateSearchWithoutReload(key, values);,它会跳过这个电话。然后,在跳过之后,它将重置为不跳过重新加载。

我试过只设置$rootScope.skipNextSearchChangeReload = true,然后$location.search(k, v)然后$rootScope.skipNextSearchChangeReload = false,但显然这些事件并没有传播都是通过和skipNextSearchChangeReload设置为false它跳过了以前的样子。所以这是我能想到的最好的。

1

是的!您可以有条件地使用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; 
} 
相关问题