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で生成しました。更新する必要があります
ジェフ

2
申し訳ありませんが、あるべき[routerLink]="['/home']"
ギュンターZöchbauer

2
directives: [ROUTER_DIRECTIVES],コンポーネントのメタデータに追加するのを忘れたのかもしれません。それがなければ、AngularはrouterLinks を解析する方法を知りません。
Mark Rajcok 16

回答:


321

あなたがそこに示しているコードは完全に正しいです。

このテンプレートを使用するモジュールにRouterModule(RouterLinkが宣言されている場所)をインポートしていないことが問題だと思います。

同様の問題があり、この手順はドキュメントに記載されていないため、解決に時間がかかりました。

したがって、このテンプレートを使用してコンポーネントを宣言するモジュールに移動し、以下を追加します。

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

次に、それをモジュールのインポートに追加します。

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

正しいインポート文に加えて、<router-outlet></router-outlet>要素にあるrouterLinkを表示する場所も必要です。そのため、データを表示する場所をルーターが認識できるように、HTMLマークアップのどこかに配置する必要があります。


1
私もそう思いました-私の場合もあなたは全く正しいです!
ダナンジェイ2018年

1
インポートにルーターモジュールを追加するとうまくいきました、ありがとう!
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

mroe情報にこのように使用するこのトピックを読む

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

7
あなたのリンクによると、彼はrouterLink;-)動作するはずです
ギュンターZöchbauer

これはで機能し"@angular/router": "~3.4.0"ます。乾杯!
mikeym 16

2
はい、ブラケット表記は機能します(特定の目的で有効な構文です)が、これはこの質問の解決策ではありません。
isherwood 2017

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 2017

これで終わりです!<a [routerLink]="['/home']" routerLinkActive="active">ホーム</a>チュートリアルに従っていたので、<li>タグにrouterLinkActiveを挿入しました。私がそれを<aタグに置いたとき、それは今機能します!どうもありがとう!!!!これは素晴らしいです!
リッチP

ところで、私はすでに他のすべてのタグ/推奨要素を配置しています。現在、この機能は(ある程度)機能します。他の行を選択すると、選択した行の値が渡されている(URLに表示されている)にもかかわらず、最初の行のみがレンダリングされていることに気付いたので、チュートリアルの残りの部分に従う必要があります。しかし、それは別のトピックになります。このすばらしい助けに感謝します。
リッチP

私はなぜ知らないが、私は、ブラケットを入れたときに、それは私のために働いた、と私は私のアプリモジュールでRouterModuleをインポートしませんでした...
Cegone

1

routerLinkの代わりにrouterlinkを使用していました


私はこの間違いを犯し、これで修正しました!また、あなたが反対票を投じられた理由もわかりません(おそらく、これが代わりにコメントであったか、この特定の質問に直接回答しないためでしょうか?)。それを反対票を投じる人々が理由を提供できればいいのですが。
JoniVR

1

この質問は今ではかなり古くなっていることを承知しており、おそらくあなたはこれを修正していると思いますが、この問題をトラブルシューティングしているときにこの投稿を見つけた人のために、ここに投稿します。 AnchorタグがIndex.htmlにある場合は機能しません。コンポーネントの1つにある必要があります


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を見つけるためにいくつかの検索をしました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.