我有几种状态使用相同的控制器。其中一些不需要URL参数,而有些则需要。如果未提供URL参数,如何避免可以访问状态?
示例:
我有2个观点或状态,列表和单个。它们共享同一个控制器。我的路线映射如下:
state: app.list
url: /list
controller: appCtrl
state: app.single
url: /single/:id
controller: appCtrl
现在,我希望只有在指定了id时才能访问single
,其他方式是重定向到其他页面。如何使用同一个控制器?
答案 0 :(得分:3)
方法1
您可以将$urlRouterProvider
与when()
一起用于重定向。
app.config(function($urlRouterProvider){
// when there is an single route without param, redirect to /list
$urlRouterProvider.when('/single/:id', ['$match', '$state', function($match, $state) {
if($match.id === ""){
$state.transitionTo("app.list");
}
}
]);
});
工作演示:http://plnkr.co/edit/sEoUGGCEge0XbKp3nQnc?p=preview
方法2
您可以查看param
方的controller
并将其重定向到特定页面
myApp.controller('MainCtrl', function($state, $stateParams) {
if($state.current.name == 'app.single' && $stateParams.id === ""){
$state.transitionTo("app.list");
}
});
工作演示:http://plnkr.co/edit/QNF1RHy4Prde4CRhNLFa?p=preview
注意:在上面的演示中,当您的当前状态不应为app.single
时,重定向会起作用。如果你处于app.single
状态并且没有参数,那么状态就不会改变。请转到main
页面,然后点击链接without param of single state
。它会重定向到list
州。