加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Angular UI路由器 – 强制URL参数?

发布时间:2020-12-17 17:13:58 所属栏目:安全 来源:网络整理
导读:我有几个状态使用相同的控制器.其中一些不需要URL参数,而有些则需要.如果未提供URL参数,如何避免可以访问状态? 例: 我有2个观点或状态,列表和单个.它们共享同一个控制器.我的路线映射如下: state: app.listurl: /listcontroller: appCtrlstate: app.singl
我有几个状态使用相同的控制器.其中一些不需要URL参数,而有些则需要.如果未提供URL参数,如何避免可以访问状态?

例:

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

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

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

现在,我希望只有在指定了id时才能访问single,否则只需重定向到其他页面.怎么可能使用同一个控制器?

解决方法

方法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

您可以检查控制器端的参数并将其重定向到特定页面

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状态并尝试没有param,则状态不会改变.所以转到主页面,然后单击没有单个状态参数的链接.它将重定向到列表状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读