我有一条路线:
.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";
}
}
})
答案 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
详情如下:
答案 2 :(得分:0)
如果我找对你,如果用户请求的状态与定义的任何状态都不匹配,则需要进入状态。
如果这是要求,则尝试使用$ urlRouterProvider的“otherwise”方法
等
$urlRouterProvider.otherwise("/default-state");