如何在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'})">