Javascript 如何使用othwerwise函数传递查询参数

Javascript 如何使用othwerwise函数传递查询参数,javascript,angularjs,angular-ui-router,angular-ui,Javascript,Angularjs,Angular Ui Router,Angular Ui,考虑到以下javascript: $stateProvider .state('search', { url: '/search?query', }) ; $urlRouterProvider.otherwise("search"); 当我进入页面时 base_url?query=x 我被重定向到 基本url/搜索 但是查询参数丢失了 是否有方法使用otherwise函数传递查询参数 有 UI路由器在这里有本机解决方案 否则不必是“url”字符串,它可以是一个函数 在本问

考虑到以下javascript:

$stateProvider
  .state('search', {
    url: '/search?query',
})   
;

$urlRouterProvider.otherwise("search");
当我进入页面时

base_url?query=x
我被重定向到

基本url/搜索

但是查询参数丢失了

是否有方法使用otherwise函数传递查询参数

UI路由器在这里有本机解决方案

否则
不必是“url”字符串,它可以是一个函数

在本问答中检查它的作用:

代码可以是这样的:

$urlRouterProvider.otherwise(function($injector, $location){
    var state = $injector.get('$state');
    state.go("search", $location.search()); // here we get { query: ... }
    return $location.path();
});
$location.search()
将为我们提供params对象,它可能类似于:
{query:…}
。我们接受它,并重定向到状态搜索与此参数


选中它

您根本不需要抓取注射器和$state.go。
否则
方法的参数可以是URL路径,该路径可以包含参数

因此,在您的特定情况下,以下代码可以引导您找到base\u url/search?query=x

$urlRouterProvider.otherwise("/search?query=x");
或者,参数可以是返回URL路径的函数。如果您不确定它可能具有哪些URL参数,则只需从
$location
获取参数,然后将其格式化为类似字符串的URL并返回

$urlRouterProvider.otherwise(function($injector, $location) {
    var params = $location.search()

    // format params to 'p1=v1&p2=v2' style
    var formatted = Object.keys(params).map(function(key) {
        return key + '=' + params[key]
    }).join('&')

    return '/search?' + formatted
});

在启用HTML5模式的情况下,它不适用于我。在plunkr中,它也被注释掉了。请你举一个启用HTML5的例子好吗?我被重定向了两次。我打印了console.log($location,$location.path(),$location.search());。我第一次得到“/”Object{vid:“Auto1”},然后是“/”Object{},我不是HTML5模式的粉丝或用户,但这里是调整后的版本:。简而言之:别忘了包括正确的“绝对”url。。。因为我们不是生活在安全的地方,在散列#之后进行安全路由……我认为没有必要编写return$location.path();。这会触发一个额外的状态重定向,而我们已经用state.go函数发出了一个状态重定向。最重要的是,正如[doc saysg():否则必须是:您要重定向到的url路径或返回url路径的函数规则。因此,我们必须(shuold)返回该路径…希望它能有所帮助。。。