AngularJS UI-Router

时间:2015-10-27 22:46:19

标签: javascript angularjs angular-ui-router

我有一个url:/ test2 / foo / {int} / bar / {int}以及它所导致的状态。 我试图找出在/ test2 / optional之后制作零件的最佳方法。显然,使用壁球参数本身很容易。但在这里,它不仅涉及参数,还涉及网址的前面部分。换句话说,以下是我想要获得的有效网址:

/test2
/test2/foo/4
/test2/foo/4/bar/8
/test2/bar8

这些无效:

/test2/meh/4/bah/8
/test2/foo
/test2/foo/bar
/test2/4
/test2/4/8

到目前为止,我有这个:

$stateProvider.state('test2', {
  url: '/test2/{slug1:foo}/{param1:[0-9]+}/{slug2:bar}/{param2:[0-9]+}',
  template: '<div><h1>Test2</h1><h2>Param1: {{ param1 }}</h2><h2>Param2: {{ param2 }}</h2></div>',
  controller: function($scope, $stateParams){
    $scope.param1 = $stateParams.param1;
    $scope.param2 = $stateParams.param2;
  },
  params: {
    slug1: { squash: true, value: null },
    slug2: { squash: true, value: null },
    param1: { squash: true, value: null },
    param2: { squash: true, value: null }
  }
});

它的效果很好,但壁球和/或匹配可以产生一些有趣的结果。我不确定我做错了什么,或者内心有问题。基本上,这些网址似乎也是有效的,并且它们解析了正确的param1和param2值:

/test2/foo4/bar/8
/test2/foo/4/bar8
/test2/foo4/bar8
/test2/foo4bar8

壁球文档说明了修剪上一个/下一个斜杠的事情,所以可能就是这样。但它仍然很奇怪。另外,显然我不能在正则表达式中使用前导斜杠(/),因此我的双手与正则表达式相关联。

这可以改善吗?有什么更好的方法来解决这个问题?

(请记住,我不想要不同的状态来回答不同的网址路径 - 这会杀死整个点。)

0 个答案:

没有答案