通常,在项目中,某些路线是必需的,而不是开发人员的选择。也就是说,我也同意这些路由,但会损害查询参数(php 或其他服务器端语言中所谓的 GET 变量)。
这里有一个类似的问题,但它是一个比这个更简单的场景,它没有提到任何关于解决“可选”路由参数顺序的内容。当我们需要一个或两个以上的“可选”路由参数时,它也不会处理这种情况(例如当您过滤各种内容的内容时)。它只有一个“可选”路由参数。我一直使用引号,因为据我所知,默认情况下没有“可选路由参数”之类的东西,只要实现这一点的唯一方法是伪造它(如声明所有可能的路由,使用和没有那个参数)。
例如,根据项目要求,路线需要如下所示:
/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
不谈,至少其余的都是一个非常常见的情况,事实上,我参与的所有项目都有这样的过滤/排序路线,而不是查询参数。
那么,对于 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 }
]
或者也许使用子路由,将它们定义在一个单独的文件中,这样我们就不会在一个地方用这么多配置来混淆主应用程序路由。
所以上面的路由配置有明显的局限性:
- 在上面的示例中,我们最多只应用了 2 个过滤器(
categories
和tags
)。如果我们有 4 或 5 个过滤器,这将太麻烦了。例如,如果有 5 个过滤器,我们需要定义路由以组合任何 1 个过滤器、任何 2 个过滤器、任何 3 个过滤器、任何 4 个过滤器和所有 5 个过滤器。还要添加分页......这将是路由配置的地狱。我的意思是,对于上述每条路线,添加我们可能有也可能没有的事实/page/:page
(我们不希望/page/1
在 url 中,我们只想/page
在从第 2 页开始的 url 中)。这只是将上述所有路线翻了一番。维护此路由配置本身已成为一个单独的项目。 - 按照上面的路由配置,我们只能在url中按照一定的顺序堆叠segments:先是category,再是tags。当然,我们可以通过在路由配置中设置所有可能的组合(同时具有
/categories/:categories/tags/:tags
和/tags/:tags/categories/:categories
)来解决这个问题,当我们有超过 2 个过滤器时,这将是一个痛苦的配置。维护起来太复杂了。/categories/cat1_cat2
如果路由器能够简单地识别该段组在 url 中其他段/段组中的位置,那将更有用。当然,这意味着配置看起来会与现在不同,因为我们还可以在 url 中有“单个”段,而不仅仅是成对的。但这是他们早在开始开发路由器之前就应该考虑的事情。
我不敢相信,在构建角度路由器时,他们没有考虑这种(非常常见的)场景并提供某种帮助来实现这种定制。有什么我想念的吗?路由器实际上是否提供了一种自定义此类内容的方法,但在我碰巧看到的任何教程中都没有人参与其中?