gpt4 book ai didi

javascript - 在 Angular `$location.search()` 中保留 `redirectTo` ?

转载 作者:行者123 更新时间:2023-11-29 18:06:39 26 4
gpt4 key购买 nike

如何用

保存 $location.search()
$routeProvider.otherwise({redirectTo: xxx})

我知道,我可以在那里使用一个函数,它将旧对象 $location.search() 作为第三个参数。我主要关心一个键,我们称它为 a,我试过了

function(a, b, search) {
return "/mainpage?a=" + search[a];
}

但它总是以 /mainpage?a=undefined 结尾。更糟糕的是,它使我的调试器崩溃,从而减慢了我的速度。此外,这不适用于所有键(我稍后可能需要)。

最佳答案

我采用了一种新方法,您可以在其中监听 $routeChangeStart 并在上一个(不存在的)页面包含 important 时修改 search() 获取参数。完整的源代码和演示可以在 this Plunker 上找到.

这个概念类似于@Mikko 的解决方案,但实现有点不同(没有自定义提供程序),它按照作者的说明工作。

本质

angular.module('myApp').run(['$rootScope', '$location', 'URL', function($rootScope, $location, URL) {

// Previous search() value
var prevSearch = {};

// Listen to event
$rootScope.$on('$routeChangeStart', function(evt, next, current) {

// Have search() parameters and are going to default route
if(prevSearch !== undefined && $location.path().endsWith(URL.defaultRoute)) {

// Extract only important params
var important = {};
var importantCount = 0;

for(var param in prevSearch) {

if(URL.importantParams.indexOf(param) > -1) {

important[param] = prevSearch[param];
importantCount++;

}

}

// Unset prevSearch
prevSearch = {};

// Apply important params, if any
if(importantCount > 0) {

$location.search(important);

}


} else {

// Remember current search()
prevSearch = $location.search();

}

});

}]);

run 函数为 $routeChangeStart 设置了一个监听器,并且还记住了 search() 值(GET 参数)的先前值。

当应用程序被重定向到默认路由时,它会检查 search() 参数的先前值并仅提取重要的参数。如果有的话,它会覆盖 search() 值,因此将重要的 GET 参数设置为默认路由。

我制作了一个URL 常量,可以在其中设置默认路由并指定重要参数。代码如下:

angular.module('myApp').constant('URL', {
defaultRoute: '/mainpage',
importantParams: ['a', 'b'],
});

演示

第一个 链接在一个不存在的 URL 上包含 3 个参数。页面被正确重定向到默认路由,并且只保留了 2 个重要的路由。

第二个第四个 链接不包含任何参数,并且两个链接都不应用任何附加参数(无论您单击它们时位于哪个页面) .

第三个​​ 链接在默认路由上也包含 3 个参数,并且所有参数都被保留(不发生重定向)。

关于javascript - 在 Angular `$location.search()` 中保留 `redirectTo` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com