可选路由参数,非查询参数(@ angular / router 3)

时间:2016-07-28 13:47:45

标签: angular angular2-routing angular2-router3 routeparams

在项目中,通常需要某些路线,而不是开发人员的选择。也就是说,我同意这些路线,这有损查询参数(在php或其他服务器端语言中所谓的GET变量)。

有一个类似的问题here,但这是一个比这个更简单的场景,并没有提到解决“可选”路线参数订单的任何问题。当我们需要有一个或两个“可选”的路由参数时(例如当您为各种事物过滤内容时),它也不会处理这种情况。它只有一个单一的“可选”路线参数。我一直在使用引号,因为据我所知,默认情况下没有“可选路由参数”这样的东西,只要实现这一点的唯一方法就是伪造它(就像声明所有可能的路由一样,用和没有那个参数)。

例如,根据项目要求,路线需要这样

/videos
/videos/categories/cat1_cat2
/videos/tags/tag1_tag2
/videos/categories/cat1_cat2/tags/tag1_tag2
OR
/videos/tags/tag1_tag2/categories/cat1_cat2

不喜欢

/videos?categories=cat1_cat2&tags=tag1_tag2

好的,上面路线示例中的 OR 是我自己的,而非要求。因为,即使在这种情况下情况并非如此(我们不希望谷歌或其他搜索引擎有机会在不同的路线上看到相同的内容),仍然 - 在其他情况下 - 顺序无关紧要。并且,在这些情况下,开发人员更容易在生成路由链接时根本不关心他/她堆叠过滤器的顺序。通过“过滤器”,我指的是一个段组,例如/categories/:categories

OR 放在一边,至少剩下的是一个非常常见的情况,事实上我参与的所有项目都有这样的过滤/排序路线,而不是查询PARAMS。

因此,对于angular的路由器有这个限制,如何进行所需的路由?

当然,在我的脑海中,我会考虑这种设置:

[
  { path: '/videos/categories/:categories/tags/:tags', component: VideosComponent },
  { path: '/videos/categories/:categories', component: VideosComponent },
  { path: '/videos/tags/:tags', component: VideosComponent },
  { path: '/videos', component: VideosComponent }
]

或者可能使用子路由,将它们定义在一个单独的文件中,这样我们就不会在一个地方混淆主配置路由。

SO 上述路由配置有明显的局限性:

  1. 在上面的示例中,我们最多只应用了2个过滤器 (categoriestags)。如果我们这样做,这将太麻烦了 4或5个过滤器。例如,在5个过滤器的情况下,我们需要定义路线以组合任何1个过滤器,任意2个过滤器,任何3个过滤器,任何4个过滤器和所有5个过滤器。还要添加分页...这将是路由配置地狱。我的意思是,对于上述每条路线,添加一个事实,即我们可能也可能没有/page/:page(我们不想在网址中/page/1,我们只想拥有{{1}在从第2页开始的网址中)。这简单地使所有上述路线加倍。维护此路由配置已经成为一个单独的项目。
  2. 根据上述路由配置,我们只能按特定顺序堆叠网址中的细分:类别 首先,标签第二。当然,我们可以通过设置全部来解决这个问题 路由配置中的可能组合(同时具有/page/categories/:categories/tags/:tags),当我们有2个以上的过滤器时,这将很难配置。维护起来太复杂了。如果路由器只是识别/tags/:tags/categories/:categories,无论该网段组在网址中的其他网段/网段组中的位置,都会更有用。当然,这意味着配置看起来与现在的不同,因为我们也可以在网址中有“单个”段,而不仅仅是成对的。但在他们开始开发路由器之前,这是他们应该考虑的事情。
  3. 我无法相信,在构建角度路由器时,他们没有考虑这种(非常常见的)场景并提供某种帮助以实现这种定制。有什么我想念的吗?事实上,路由器是否提供了一种自定义类似内容的方法,但是在我碰巧看到的任何教程中都没有人进入过它?

0 个答案:

没有答案