有没有办法有条件地关闭控制器中的reloadOnSearch?

Jus*_*tin 10 javascript angularjs angular-ui-router

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

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

reloadOnSearch定义状态时可以设置为false但是它总是为false.

有没有办法reloadOnSearch从控制器内切换路径?或者,我可以保留reloadOnSearch: true并且只是为了我不希望它发生的一个实例阻止重新加载吗?

我在用ui.router.

Cam*_*ron 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);
    };
Run Code Online (Sandbox Code Playgroud)

那么对 url 的所有更改仍将照常重新加载。但是,当您想跳过重新加载时,您拨打电话updateSearchWithoutReload(key, values);,它就会跳过该电话。然后,跳过后,它将重置为不跳过重新加载。

我尝试过只设置$rootScope.skipNextSearchChangeReload = trueand then $location.search(k, v)and then $rootScope.skipNextSearchChangeReload = false,但显然事件并没有一路传播,而是在它跳过之前skipNextSearchChangeReload设置为。false所以这是我能想到的最好的办法。