RouterLink不起作用


117

我在angular2应用中的路由运行良好。但是我将基于进行一些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版本和路由器版本?
君特Zöchbauer

它不起作用。您确定自己的举动地点吗?我认为我正在使用angular2的最新版本,但我不知道如何检查它。我用ng new生成了它。它应该更新
Jeff

2
对不起,应该是[routerLink]="['/home']"
君特Zöchbauer

2
也许您忘记了添加directives: [ROUTER_DIRECTIVES],到组件的元数据。没有这些,Angular将不知道解析routerLinks。
Mark Rajcok '16

Answers:


320

您在此处显示的代码绝对正确。

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

我遇到了类似的问题,并且花了一些时间才能解决,因为此步骤未在文档中提及。

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

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

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

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

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


1
我是这么认为的-对我来说,你也绝对正确!
Dhananjay

1
将Router模块添加到我的导入中就可以了,谢谢!
ENDEESA

1
为我工作。非常感谢!
TheBosti

20

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

<router-outlet></router-outlet>

9

尝试如下更改链接:

  <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="https://stackoverflow.com/">


5

像这样使用它来获取信息,请阅读本主题

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

7
根据你的链接,他routerLink应该工作;-)
君特Zöchbauer

这适用于"@angular/router": "~3.4.0"。干杯!
mikeym '16

2
是的,方括号表示法有效(并且具有特定用途的有效语法),但这不是解决此问题的方法。
isherwood '17

1

链接错误,您必须执行以下操作:

<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>

您可以阅读本教程


1
括号表示法有不同的用途,不能解决此问题。
isherwood '17

就是这样!<a [routerLink]="['/home']" routerLinkActive="active">主页</a>我正在按照教程进行操作,该教程使我将routerLinkActive放在<li>标记中。当我将它放在<标签中时,它现在可以工作了!非常感谢!!!!这太好了!
Rich P

顺便说一句,我确实已经安装了所有其他标签/建议元素。现在,此功能有效(有点)。我必须遵循本教程的其余部分,因为我注意到当我选择其他行时,即使正在传递所选行的值(我在url中看到它),也仅呈现第一行。但这将是另一个话题。再次非常感谢您的大力帮助。
Rich P

我不知道为什么,但是当我把支架,它的工作对我来说,我没有在我的应用程序模块导入RouterModule ..
Cegone

1

我使用的是routerlink而不是routerLink


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

1

我知道这个问题到现在为止已经很老了,您现在很可能已经解决了,但是我想在此处发布该文章,作为在解决该问题时找到该帖子的任何人的参考,因为这种事情已经赢得了如果您的Anchor标记位于Index.html中,则该方法无效。它必须在组件之一中


1

对于在拆分模块后检查您的路由的人有此错误,以下事情发生在我身上:

public-routing.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 { }

app-routing.module.ts:

const routes: Routes = [
];

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

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

public-routing.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 { }

app-routing.module.ts:

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

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

1

还有另一种情况适合这种情况。如果在拦截器中使其返回非布尔值,则最终结果将是这样。

例如,我曾尝试退货obj && obj[key]。经过一段时间的调试,然后我意识到我必须手动将其转换为布尔型Boolean(obj && obj[key]),以便让点击通过。



1

对于像我这样不是很敏锐的眼睛,我href取而代之的是routerLink,我进行了一些搜索以找出#facepalm。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.