4

所以我在我很棒的 angularjs 驱动的单页应用程序中拥有了我功能齐全的静态路由器,现在我得到了使某些路由动态的任务。

说直到现在我有以下参数路径:

  • ^/user/:userName
  • ^/product/:productName
  • ^/category/:categoryName

现在他们都需要响应 path ^/:slug,这将调用一些后端 API 以获取与该 slug 对应的资源类型,并最终将请求转发到具有特定、和的controller特定。resolvetemplateUrlabstractdata

有什么想法吗?


编辑:我猜路由镜像(又名透明转发)可以实现相同的功能,其中在内部触发了请求之外的另一条路由,即使路由更改不公开可见。但我仍然不知道是否有任何这些在角度或ui路由器中是可能的......)

4

1 回答 1

3

我想到了。它不漂亮,但效果很好。

除了将上面的现有路由重命名为^/:username(alias 'profile')、^/:productName(alias 'products') 和(alias 'category') 之外,我还使用其控制器^/:categoryName创建了一个新的通用路由。后者必须首先在./:slugResolverController$stateProvider

ResolverController是以下函数:

function ($state, $stateParams, resource) {
  switch (resource) {
  case 'user':
    $state.go('profile', {'username': $stateParams.slug});
    break;
  case 'product':
    $state.go('products', {'productName': $stateParams.slug});
    break;
  case 'category':
    $state.go('category', {'categoryName': $stateParams.slug});
    break;
  default:
    // 404
    break;
  }
}

您可能想知道第三个参数resource。它由该状态的解析返回,并保存有关请求的 slug 的资源类型的信息。

于 2013-10-25T09:22:24.987 回答