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

时间:2016-03-09 10:59:35

标签: angularjs angular-ui-router angular-ui

我有一条路线:

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

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

我不想在控制器中执行此操作,因为我对其他路由使用相同的控制器,如果query未定义,则控制器具有某些行为。

我想要的是默认query

的特定路线

在古老的角度路线中,我做过这样的事情......

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

3 个答案:

答案 0 :(得分:2)

您可以使用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 ... }
  }
})

答案 1 :(得分:1)

我们可以使用名为 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

详情如下:

Angular ui router passing data between states without URL

答案 2 :(得分:0)

如果我找对你,如果用户请求的状态与定义的任何状态都不匹配,则需要进入状态。

如果这是要求,则尝试使用$ urlRouterProvider的“otherwise”方法

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