Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AngularJS UI路由器中定义查询参数的默认值?_Angularjs_Angular Ui Router_Angular Ui - Fatal编程技术网

如何在AngularJS UI路由器中定义查询参数的默认值?

如何在AngularJS UI路由器中定义查询参数的默认值?,angularjs,angular-ui-router,angular-ui,Angularjs,Angular Ui Router,Angular Ui,我有一条路线: .state('list', { url:'/list?query', templateUrl: '/views/list.html', controller: 'ListCtrl as vm' }) 有没有办法确保查询的默认值 我不想在控制器中执行此操作,因为我对其他路由使用相同的控制器,并且如果未定义查询,则控制器具有某些行为 我想要的是将此特定路由设置为默认的query 在旧的角度路线中,我做过这样的事情 .when('/list', templateU

我有一条路线:

.state('list', {
  url:'/list?query',
  templateUrl: '/views/list.html',
  controller: 'ListCtrl as vm'
})
有没有办法确保查询的默认值

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

我想要的是将此特定路由设置为默认的
query

在旧的角度路线中,我做过这样的事情

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

如果我没有弄错,如果用户请求的状态与定义的任何状态都不匹配,则需要转到某个状态

如果这是必需的,那么尝试使用$urlRouterProvider的“否则”方法


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

从ui路由器wiki:

$stateProvider.state(“联系人”{
模板:“{{title}}”,
解析:{title:'我的联系人'},
控制器:功能($scope,title){
$scope.title=标题;
},
onEnter:函数($location){
如果($location){…做点什么…}
}
})

我们可以使用名为
参数的设置。有一个

这些链接将按预期工作

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

详情如下:


我试过了,但似乎
query
params是可选的,因此无论是否定义,路由都是匹配的。太棒了,这看起来是一个完美的答案。到目前为止,我一直在这样做,这是有点黑客<代码>解析:{updateParams:['$stateparms',函数($stateparms){if(!$stateparms.query){$stateparms.query=“DEFAULT VALUE”;}}}]}
$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 ... }
  }
})
.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'})">