如何在 AngularJS UI-Router 中定义查询参数的默认值?

How to define defaults for query params in AngularJS UI-Router?

我有一条路线:

.state('list', {
  url:'/list?query',
  templateUrl: '/views/list.html',
  controller: 'ListCtrl as vm'
})

有没有办法确保查询的默认值?

我不想在控制器中这样做,因为我对其他路由使用相同的控制器,如果 query 未定义,控制器会有某些行为。

我想要的是这条特定的默认路由 query

在旧的angular路线中我做过这种事...

.when('/list', 
  templateUrl: '/views/list.html',
  controller: 'ListCtrl'
  controllerAs:true,
  redirectTo:function(routeParams, path, search) {
    if(!search.query) {
      return "list?query=defaultSearch";   
    }
  }
})

如果我没猜错,您需要转到用户请求的状态与定义的任何状态都不匹配的状态。

如果这是要求,请尝试使用 $urlRouterProvider

的 "otherwise" 方法

喜欢,

$urlRouterProvider.otherwise("/default-state");

您可以使用 onEnter 方法在您的控制器加载之前执行逻辑。

来自 ui-router wiki https://github.com/angular-ui/ui-router/wiki:

$stateProvider.state("contacts", {
  template: '<h1>{{title}}</h1>',
  resolve: { title: 'My Contacts' },
  controller: function($scope, title){
    $scope.title = title;
  },
  onEnter: function($location){
    if($location){ ... do something ... }
  }
})

我们可以使用名为 params 的设置。有个working plunker

.state('list', {
  url:'/list?query',
  templateUrl: 'views/list.html',
  controller: 'ListCtrl as vm',
  params: { query: 'DEFAULT VALUE' }, // here the default
})

这些链接将按预期工作

<a href="#/list?"> - with default 'query' value 
<a href="#/list?query=someParam">
<a ui-sref="list({query:'theParam'})">

实际查看 here

细节在这里讨论: