Angular2 路由器 link 不工作
Angular2 Router link not working
我的路由器 link 从根组件开始工作,如果我将 link 移动到子组件,则相同的 link 不工作。 plunker 代码显示工作 link 和非工作 link。先感谢您。下面是不工作的 links.
//our root app component
import {Component} from '@angular/core'
@Component({
selector: 'my-menu',
template: `
<div>
<a routerLink="/comp11" routerLinkActive="active">Crisis Center</a> |
<a routerLink="/comp12" routerLinkActive="active">Heroes</a> |
<a routerLink="/comp21" routerLinkActive="active">Heroes</a> |
<a routerLink="/comp22" routerLinkActive="active">Heroes</a>
</div>
`,
})
export class AppLayout {}
您应该在 AppLayoutModule 中导入 RouterModule
,使其看起来如下所示:
import {NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {AppLayout} from './layout.component';
import {RouterModule} from '@angular/router';
@NgModule({
imports: [ BrowserModule, RouterModule ],
declarations: [ AppLayout ],
exports: [ AppLayout ]
})
export class AppLayoutModule {}
没有它,组件不知道 routerLink
是什么,也不会编译它来纠正 href
属性。
更新了 Plunker here
为了使路由器链接正常工作,您必须将路由器导入到您正在工作的组件中
示例
Import {Component} from '@ angular / core';
Import {Router} from '@ angular / router';
@Component ({
Selector: 'my-menu',
template:
<Div>
<a [routerLink]=["/comp11"]> Crisis Center </a>
<a <routerLink]=["/comp12"]> Heroes </a>
<a [routerLink]=["/comp21"]> Heroes </a>
<a <routerLink]=["/comp22"]> Heroes </a>
</ Div>
,})
Export class AppLayout{}
谢谢!
如果这是导入到模块中的独立组件,那么您也可以将 RouterModule 添加到模块的导入中。我个人喜欢在自己的文件中声明模块,所以这里的解决方案是使用 app-module。
import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {AppLayoutModule} from '...'; <--could also be a component
@NgModule({
declarations: [
AppComponent
],
imports: [
AppLayoutModule,
BrowserModule,
RouterModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
您唯一必须确定的是 RouterModule 被导入到使用 routerLink 指令的模块中,无论是在模块文件还是在组件文件中。
RouterModule
正在帮助消费组件将 routerLink
(指令)编译为正确的 href 属性。您可以通过两种方式解决此问题。
- 您应该在
AppLayoutModule
和其他子模块中导入 RouterModule
,如下所示:
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { RouterModule } from '@angular/router';
import { AppLayout } from './layout.component';
@NgModule({
imports: [
BrowserModule,
RouterModule
],
declarations: [AppLayout],
exports: [AppLayout]
})
export class AppLayoutModule {}
- 否则只需在 SharedModule 中创建
SharedModule
并导入和导出 RouterModule
。然后在您的子模块中导入 SharedModule(这是最好的方法)。您还可以在 SharedModule 中添加所有依赖模块
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule
],
exports: [
RouterModule
]
})
export class SharedModule { }
我的路由器 link 从根组件开始工作,如果我将 link 移动到子组件,则相同的 link 不工作。 plunker 代码显示工作 link 和非工作 link。先感谢您。下面是不工作的 links.
//our root app component
import {Component} from '@angular/core'
@Component({
selector: 'my-menu',
template: `
<div>
<a routerLink="/comp11" routerLinkActive="active">Crisis Center</a> |
<a routerLink="/comp12" routerLinkActive="active">Heroes</a> |
<a routerLink="/comp21" routerLinkActive="active">Heroes</a> |
<a routerLink="/comp22" routerLinkActive="active">Heroes</a>
</div>
`,
})
export class AppLayout {}
您应该在 AppLayoutModule 中导入 RouterModule
,使其看起来如下所示:
import {NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {AppLayout} from './layout.component';
import {RouterModule} from '@angular/router';
@NgModule({
imports: [ BrowserModule, RouterModule ],
declarations: [ AppLayout ],
exports: [ AppLayout ]
})
export class AppLayoutModule {}
没有它,组件不知道 routerLink
是什么,也不会编译它来纠正 href
属性。
更新了 Plunker here
为了使路由器链接正常工作,您必须将路由器导入到您正在工作的组件中
示例
Import {Component} from '@ angular / core';
Import {Router} from '@ angular / router';
@Component ({
Selector: 'my-menu',
template:
<Div>
<a [routerLink]=["/comp11"]> Crisis Center </a>
<a <routerLink]=["/comp12"]> Heroes </a>
<a [routerLink]=["/comp21"]> Heroes </a>
<a <routerLink]=["/comp22"]> Heroes </a>
</ Div>
,})
Export class AppLayout{}
谢谢!
如果这是导入到模块中的独立组件,那么您也可以将 RouterModule 添加到模块的导入中。我个人喜欢在自己的文件中声明模块,所以这里的解决方案是使用 app-module。
import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {AppLayoutModule} from '...'; <--could also be a component
@NgModule({
declarations: [
AppComponent
],
imports: [
AppLayoutModule,
BrowserModule,
RouterModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
您唯一必须确定的是 RouterModule 被导入到使用 routerLink 指令的模块中,无论是在模块文件还是在组件文件中。
RouterModule
正在帮助消费组件将 routerLink
(指令)编译为正确的 href 属性。您可以通过两种方式解决此问题。
- 您应该在
AppLayoutModule
和其他子模块中导入RouterModule
,如下所示:
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { RouterModule } from '@angular/router';
import { AppLayout } from './layout.component';
@NgModule({
imports: [
BrowserModule,
RouterModule
],
declarations: [AppLayout],
exports: [AppLayout]
})
export class AppLayoutModule {}
- 否则只需在 SharedModule 中创建
SharedModule
并导入和导出RouterModule
。然后在您的子模块中导入 SharedModule(这是最好的方法)。您还可以在 SharedModule 中添加所有依赖模块
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule
],
exports: [
RouterModule
]
})
export class SharedModule { }