如何在 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
细节在这里讨论:
我有一条路线:
.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
细节在这里讨论: