Angular UI Router - 强制URL参数?

时间:2014-11-19 06:36:17

标签: angularjs routing angular-ui-router

我有几种状态使用相同的控制器。其中一些不需要URL参数,而有些则需要。如果未提供URL参数,如何避免可以访问状态?

示例:

我有2个观点或状态,列表和单个。它们共享同一个控制器。我的路线映射如下:

state: app.list
url: /list
controller: appCtrl

state: app.single
url: /single/:id
controller: appCtrl

现在,我希望只有在指定了id时才能访问single,其他方式是重定向到其他页面。如何使用同一个控制器?

1 个答案:

答案 0 :(得分:3)

方法1

您可以将$urlRouterProviderwhen()一起用于重定向。

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州。