Angular 以下链接的路线?

Angular routes for following links?

我有 link 如下所述,我想为此编写 Angular 路由条件。

Link :

1.www.example.com/level-1
2.www.example.com/level-1/level-2
3.www.example.com/level-1/level-2/level-3

像这样我有大型菜单 links 所以我想要这个的路由条件所以我可以写 $routeProvider.when( '/level-1/:slug', {} );

我想以动态方式使用这意味着我不想手动编写 level-1 作为前缀词。

动态意味着它将是任何术语作为第 1 级或第 2 级或第 3 级的前缀

我试过这样的:

.when( '/level-1/:slug', {
})
.when( '/level-1/level-2/:slug', {
})
.when( '/level-1/level-2/level-3/:slug', {
})

它工作正常,但我不想这样做。

您可以根据需要将任意数量的参数传递给您的路由器,因此请尝试在您的路由中创建尽可能多的参数作为您需要的段。这样:

.when( '/:lev1/:slug', { ... })
.when( '/:lev1/:lev2/:slug', { ... })
.when( '/:lev1/:lev2/:lev3/:slug', { ... })

当然,您可以像使用 :slug 一样在控制器中访问这些参数。 但请注意,这些路线将捕获您所有具有 2、3 或 4 段的状态,因此它们可能会与您在应用程序中定义的其他路线混淆...... 为避免此问题,您可以做的一件事是为所有这些路由添加您选择的固定字符串作为前缀。例如:

.when( '/megamenu/:lev1/:slug', { ... })
.when( '/megamenu/:lev1/:lev2/:slug', { ... })
.when( '/megamenu/:lev1/:lev2/:lev3/:slug', { ... })

编辑: 根据您的评论,您似乎在这些路线中需要 n 个级别,并且您可能希望绑定到同一个控制器。这导致两种可能性:

1) 如果您使用的是 AngularJS 1.5 或更高版本,您可以创建一个组件并路由到它,创建所需参数的绑定。一条路线就够了。

2) 如果你使用的是以前版本的AngularJS或者你不想弄乱新的组件架构,那么可以尝试这样做:只定义一个具有最大级别数的路由,让我们说 5. 调用所有具有 5 个段的路由加上 slug 参数,将虚拟值传递给未使用的那些,然后在控制器上解析这些参数以查看哪些是有效的。

.when( '/megamenu/:lev1/:lev2/:lev3/:lev4/:lev5/:slug', { ... })

然后生成这样的链接:

<a href="/megamenu/group/item/code/XXXXX/XXXXX/whatever123">CLICK ME</a>

你会知道 'XXXXX' 是一个占位符,在你的控制器中必须被忽略。