即使参数没有值,我的状态URL也匹配,如何转换到默认状态?

时间:2017-01-25 02:14:40

标签: angularjs angular-ui-router

这是我的UI-Router状态:

$stateProvider.state("project",{
  url:'/project/:projectid/:typeid/:directoryid',
  templateUrl: '/app/project/view.html',
  controller: 'projectViewController',
  params:{
    typeid:{squash:true,value:null},
    directoryid:{squash:true,value:null},
  }
});

这些网址工作正常:

/project/5  
/project/5/1  
/project/5/1/2  

但是,这个网址“/ project”工作正常(或匹配),但不应该。

:应该要求projectid。如果没有传递值,则url不匹配,“否则”应切换到默认状态。

如何制作以便需要投射?

“typeid”和“directoryid”参数应该是可选的。

1 个答案:

答案 0 :(得分:1)

通过像

这样的解决来检查条件
$stateProvider.state("project",{
  url:'/project/:projectid/:typeid/:directoryid',
  templateUrl: '/app/project/view.html',
  controller: 'projectViewController',
  params:{
    typeid:{squash:true,value:null},
    directoryid:{squash:true,value:null},
  },
  resolve: function($stateParams, $location){
    //Check if url parameter is missing.
    if ($stateParams.projectid === undefined) {
      //Do something such as navigating to a different page.
      $location.path('/'); // put any location where you want to redirect
    }
  }
});