ChatGPT解决这个技术问题 Extra ChatGPT

Angular routerLink 不会导航到相应的组件

我在 angular2 应用程序中的路由运行良好。但我将根据 this 制作一些 routeLink:

这是我的路由:

const routes: RouterConfig = [
    { path:'home' , component: FormComponent  },
    { path:'about', component: AboutComponent },
    { path:'**'   , component: FormComponent  }
];

这是我制作的链接:

<ul class="nav navbar-nav item">
  <li>
    <a routerLink='/home' routerLinkActive="active">Home</a>
  </li>
  <li>
    <a routerLink='/about' routerLinkActive="active">About this</a>
  </li>
</ul>

我希望,当我单击它们时,它会导航到相应的组件,但它们不执行任何操作?

你能试试[routerLink]='[/home']吗?您使用的是什么 Angular2 版本和路由器版本?
它不起作用。你确定你引用的地方吗?我想我正在使用 angular2 的最新版本,但我不知道如何检查它。我用 ng new 生成了它。它应该更新
抱歉,应该是 [routerLink]="['/home']"
也许您忘记将 directives: [ROUTER_DIRECTIVES], 添加到组件的元数据中。没有它,Angular 将不知道解析 routerLink

j
john_h

您在那里显示的代码绝对正确。

我怀疑您的问题是您没有将 RouterModule (声明 RouterLink 的位置)导入使用此模板的模块中。

我有一个类似的问题,我花了一些时间来解决,因为文档中没有提到这个步骤。

因此,转到使用此模板声明组件的模块并添加:

import { RouterModule } from '@angular/router';

然后将其添加到您的模块导入中,例如

@NgModule({
  imports: [
    CommonModule,
    RouterModule
  ],
  declarations: [MyTemplatesComponent]
})
export class MyTemplatesModule { }

除了拥有正确的导入语句外,您还需要一个显示 routerLink 的位置,该位置位于 <router-outlet></router-outlet> 元素中,因此还需要将其放置在 HTML 标记中的某个位置,以便路由器知道在哪里显示那个数据。


我是这么认为的,是的-在我的情况下,您也绝对正确!
将路由器模块添加到我的导入中就可以了,谢谢!
在我的情况下没有任何帮助。我在显示错误信息的自定义 HttpErrorComponent 中遇到了这个问题。因此,例如,如果我的页面由于权限保护而未加载并且只显示错误 403 - 此页面上带有 routerLink 的主页按钮不起作用(不可点击)。
T
Thomas Ayoub

不要忘记在您的模板中添加以下内容:

<router-outlet></router-outlet>

i
isherwood

尝试更改链接如下:

  <ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this</a>
    </li>
  </ul>

此外,在 index.html 的标头中添加以下内容:

<base href="/">


r
rashfmnb

像这样使用它来获取更多信息阅读此topic

<a [routerLink]="['/about']">About this</a>

根据您的链接,他的 routerLink 应该可以工作;-)
这适用于 "@angular/router": "~3.4.0" 。干杯!
是的,括号表示法有效(并且是具有特定目的的有效语法),但它不是这个问题的解决方案。
E
Emeric

对于拆分模块后遇到此错误的任何人,请检查您的路线,以下发生在我身上:

公共路由.module.ts:

const routes: Routes = [
    { path: '', component: HomeComponent },
    { path: '**', redirectTo: 'home' } // ← This was my mistake
    { path: 'home', component: HomeComponent },
    { path: 'privacy-policy', component: PrivacyPolicyComponent },
    { path: 'credits', component: CreditsComponent },
    { path: 'contact', component: ContactComponent },
    { path: 'news', component: NewsComponent },
    { path: 'presentation', component: PresentationComponent }
]

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class PublicRoutingModule { }

应用程序路由.module.ts:

const routes: Routes = [
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule { }

{ path: '**', redirectTo: 'home' } 移至您的 AppRoutingModule:

公共路由.module.ts:

const routes: Routes = [
    { path: '', component: HomeComponent },
    { path: 'home', component: HomeComponent },
    { path: 'privacy-policy', component: PrivacyPolicyComponent },
    { path: 'credits', component: CreditsComponent },
    { path: 'contact', component: ContactComponent },
    { path: 'news', component: NewsComponent },
    { path: 'presentation', component: PresentationComponent }
]

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class PublicRoutingModule { }

应用程序路由.module.ts:

const routes: Routes = [
    { path: '**', redirectTo: 'home' }
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule { }

请问你能解释一下为什么吗?
我不确定,但在你的情况下可能是定义路线的顺序。通配符 ("**") 匹配所有可能的情况,因此忽略以下路由定义?
R
RandomGuy

我知道这个问题现在已经相当老了,你现在很可能已经修复了它,但我想在这里发帖作为任何人在解决这个问题时发现这篇文章的参考是这种事情赢了如果您的 Anchor 标记在 Index.html 中,则它不起作用。它需要在其中一个组件中


s
sham

我使用的是routerlink而不是routerLink。


我犯了这个错误,这解决了它!我也不知道您为什么被否决(也许是因为这可能是评论,或者因为它没有直接回答这个特定问题?)。如果反对它的人可以提供一个理由,那就太好了。
M
Mark Rajcok

链接错误,您必须这样做:

<ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this
        </a>
    </li>
</ul>

您可以阅读此tutorial


括号符号用于不同的目的,并不能解决这个问题。
就是这样! Home 我按照教程将 routerLinkActive 放在 < li > 标签中。当我将它放在 < a 标签中时,它现在可以工作了!非常感谢!!!!这太棒了!
顺便说一句,我确实已经准备好了所有其他标签/建议的元素。现在这个功能起作用了(有点)。我必须遵循本教程的其余部分,因为我注意到当我选择其他行时,即使正在传递所选行的值(我在 url 中看到它),也只会呈现第一行。但这将是另一个话题。再次感谢您的大力帮助。
我不知道为什么,但是当我放 Bracket 时,它对我有用,而且我没有在我的应用程序模块中导入 RouterModule ..
J
Jiahua Zhang

还有另一种情况适合这种情况。如果在你的拦截器中,你让它返回非布尔值,最终结果就是这样。

例如,我曾尝试返回 obj && obj[key] 东西。调试了一段时间后,我意识到我必须像 Boolean(obj && obj[key]) 一样手动将其转换为布尔类型才能让点击通过。


S
Seeliang

working sample 之后,我已经找到了纯组件情况的解决方案:

在应用级别声明组件 不要在组件中初始化


A
Aragorn

对于像我这样不是很敏锐的眼睛,我用的是 href 而不是 routerLink,我搜索了几次才弄明白#facepalm。


J
Javier

如果您将导航栏放在组件中,并且在该样式表中声明您的样式处于活动状态,则它将不起作用。就我而言,这就是问题所在。

我使用有角材料的导航栏项目是:

<div class="nav-item">
        <a routerLink="/test" routerLinkActive="active">
          <mat-icon>monetization_on</mat-icon>My link
        </a>
<mat-divider class="nav-divider" [vertical]="true"></mat-divider>

所以我将 style.scss 中的样式激活在根目录中

a.active {
  color: white !important;
  mat-icon {
    color: white !important;
  }
}

如果其他解决方案没有,我希望它对您有所帮助。


Z
Zoryana Tischenko

就我而言,我的 VS 代码中有换行器,显然,在属于 [routerLink] 的结束引号和下一个属性之间没有空格。换行器将其分成两行,因此丢失的空间未被注意到。


a
anastaciu

大多数时候问题是拼写错误

<a [routerLink]="['/home']" routerLinkActive="active">Home</a>

只需再次检查拼写。


S
SAJID BHAT

我能够解决我的问题,我将导航链接从索引页面移动到组件(我实际上在 index.html 中添加了模板)


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅