角路由:前缀匹配

问题描述 投票:1回答:1

我正在阅读有关Angular布线的文档,并创建了一个简单的测试:

const routes: Route[] = 
[
    { path: '', redirectTo: '/home', pathMatch: 'full' },
    { path: 'home', pathMatch: 'prefix', component: HomeComponent },
//  { path: '**', component: PageNotFoundComponent },
];

据我所知,类似“ / home / 12345”的路径应与第二条路线匹配。路径是此URL的前缀...但这确实会发生:

enter image description here

行为就像它没有在路由器出口上映射任何组件。页面上的大标题来自上部组件。如果我取消注释第三条路线(“ **”),则此路径将转到PageNotFoundComponent。

我在做什么错,或者我的误解在哪里?为什么我的2路径变体不起作用?

angular angular-routing angular-router
1个回答
1
投票

这并不是前缀的意思。

在大多数情况下,您只需要默认的pathMatch前缀。这意味着角度路由会找到第一个与URL匹配的路由器,然后继续查找任何可能与该路由匹配的子代(在您的情况下,没有子代)。

除了重定向空路径(在示例中它们向您显示的内容)以外,您实际上并不需要pathMatch'full'。我认为没有其他有用的方法(但也许有人可以发表评论)。

您正确看到此错误,因为没有这样定义的路由。如果要在“ home”之后添加一个变量,则必须将其定义为“ home /:variableName”。

来自文档:

技术上,pathMatch ='full'会在 网址中其余不匹配的细分与匹配。在这个例子中 重定向位于顶层路由中,因此剩余的网址和 整个URL是同一回事。

另一个可能的pathMatch值是'prefix',它告诉路由器 当其余网址以开头时,匹配重定向路由 重定向路由的前缀路径。这不适用于此示例应用 因为如果pathMatch值为'prefix',则每个URL都将匹配 ”。

© www.soinside.com 2019 - 2024. All rights reserved.