【发布时间】:2017-09-08 21:32:22
【问题描述】:
使用@angular/router 版本3.0.0-beta.2 我想构建一个允许我的用户浏览文件系统的应用程序。
以下说明了我希望支持的 URL 类型:
http://myapp/browse <--- Browse without parameters, lists root dir
http://myapp/browse/animals <--- Browse "animals" subdirectory
http://myapp/browse/animals/mammals <--- Browse "animals/mammals" subdirectory
我正在努力想出一种使用RouterConfig 进行配置的机制。
路径样式参数
{ path: 'browse/:path', component: BrowserComponent }
这个RouterConfig 只支持一个子目录,即browse/animals。但是,如果我尝试浏览到子目录 /browse/animals/mammals 的第二级,则会收到以下错误:
Error: Cannot match any routes: '/browse/animals/mammals'
我了解路由器中参数的默认行为(在本例中为 :path)是在第一个正斜杠上“中断”,并假设以下标记是子路径。
如何配置路由器以允许 :path 参数接受正斜杠/“吞噬”整个剩余 URL 作为参数?
可选参数
如何处理用户希望浏览根目录的用例,即 URL /browse。这与上述路由器配置不匹配,因为:path 参数不存在。
我已尝试使用两个不同配置的路由器路径来解决此问题:
{ path: 'browse', component: BrowserComponent },
{ path: 'browse/:path', component: BrowserComponent }
但是,这给我带来了routerLinkActive 的问题。我有一个带有浏览器链接的主菜单,如下所示:
<a [routerLink]="['/browse']" [routerLinkActive]="['active']">...</a>
如果用户浏览到根目录/browse 或某个子目录/browse/animals/,我希望这个主菜单链接具有active 类。
但是,鉴于/browse/animals/ URL 不是/browse 路由的子,它不会变成active。
我不能将:path 参数路由作为/browse 根的子路由,因为不需要嵌套视图,这会导致:
Cannot find primary outlet to load BrowserComponent
【问题讨论】:
-
有什么理由不使用路由器的 beta.2 版本?我不希望这会起作用,但其他几个问题已得到修复。
-
@GünterZöchbauer 不,我没有充分的理由不使用该版本的路由器。我会增加我的依赖。