[英]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.