Jus*_*tin 10 javascript angularjs angular-ui-router
我有一个控制器,我有时使用更新位置$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);
};
Run Code Online (Sandbox Code Playgroud)
那么对 url 的所有更改仍将照常重新加载。但是,当您想跳过重新加载时,您拨打电话updateSearchWithoutReload(key, values);
,它就会跳过该电话。然后,跳过后,它将重置为不跳过重新加载。
我尝试过只设置$rootScope.skipNextSearchChangeReload = true
and then $location.search(k, v)
and then $rootScope.skipNextSearchChangeReload = false
,但显然事件并没有一路传播,而是在它跳过之前skipNextSearchChangeReload
设置为。false
所以这是我能想到的最好的办法。
归档时间: |
|
查看次数: |
2403 次 |
最近记录: |