308 votes

Impossible de se lier à 'routerLink' car ce n'est pas une propriété connue

Récemment, j'ai commencé à jouer avec angulaire 2. Il est impressionnant jusqu'à présent. J'ai donc lancé une démo projet personnel pour l'amour de l'apprentissage à l'aide de angular-cli.

À la base de la configuration du routing, je veux maintenant naviguer à certains itinéraires à partir de l'en-tête, mais depuis que mon en-tête est un parent à l' router-outlet, je reçois cette erreur.

app.component.html

<app-header></app-header> // Trying to navigate from this component
    <router-outlet></router-outlet>
<app-footer></app-footer>

header.component.html

  <a [routerLink]="['/signin']">Sign in</a>

Maintenant, je comprends en partie, je suppose que depuis que le composant est un wrapper autour de router-outlet il ne serait pas possible de cette façon d'accéder router. Alors, est-il une possibilité d'accès à la navigation de l'extérieur pour un scénario comme celui-ci?

Je serais vraiment heureux d'ajouter plus d'information si nécessaire. Je vous remercie à l'avance.

Mise à jour

1 - Ma package.json a déjà la stable @angular/router 3.3.1version. 2 - Dans mon principal app module, j'ai importé l' routing-module. Veuillez voir ci-dessous.

app.le module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AlertModule  } from 'ng2-bootstrap';
import { LayoutModule } from './layout/layout.module';
import { UsersModule } from './users/users.module';
import { AppRoutingModule } from  './app-routing.module';
import { AppComponent } from './app.component';
import { PageNotFoundComponent } from './shared/components/not-found.component';

@NgModule({
  declarations: [
    AppComponent,
    PageNotFoundComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AlertModule.forRoot(),
    LayoutModule,
    UsersModule,
    AppRoutingModule  --> This is the routing module. 
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

app-routage.le module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { SigninComponent } from './users/signin/signin.component';
import { PageNotFoundComponent } from './shared/components/not-found.component';

const routes: Routes = [
{ path: '**', component: PageNotFoundComponent }
];

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

export class AppRoutingModule {}

La route, je suis en train d'essayer d'accéder a un délégué d'un autre module c'est le UsersModule

l'utilisateur de routage.le module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { SigninComponent } from './signin/signin.component';

const usersRoutes: Routes = [
  { path: 'signin',  component: SigninComponent }
];
@NgModule({
  imports: [
    RouterModule.forChild(usersRoutes)
  ],
  exports: [
    RouterModule
  ]
})

export class UsersRoutingModule { }

Alors que je suis en train de naviguer à partir d'un composant qui fait partie de l' Layout module, mais n'a aucune notion du routeur module. C'est que ce qui est à l'origine de l'erreur.

De mise en page.le module.ts

import { NgModule } from '@angular/core';
import { HeaderComponent } from './header/header.component';
import { FooterComponent } from './footer/footer.component';

@NgModule({
  declarations: [HeaderComponent, FooterComponent],
  exports: [HeaderComponent, FooterComponent]
})
export class LayoutModule{}

Je suis en train de naviguer à partir de la HeaderComponent. Je serais heureux de vous fournir plus d'informations si nécessaire.

576voto

Günter Zöchbauer Points 21340

Vous avez besoin d'ajouter RouterModule de imports chaque @NgModule() lorsque les éléments de l'utilisation de tout composant ou de la directive (dans ce cas - routerLink et <router-outlet>.

declarations: [] est pour faire des composants, des directives, des tuyaux, connu à l'intérieur du module en cours.

exports: [] est pour faire des composants, des directives, des tuyaux, à la disposition de l'importation de modules. Ce qui est ajouté à l' declarations seulement est privé pour le module. exports rend public.

36voto

Il vous manque soit l'inclusion du package de route, soit l'inclusion du module de routeur dans votre module principal d'application.

Assurez-vous que votre package.config a ceci:

 "@angular/router": "^3.3.1"
 

Ensuite, dans votre app.module, importez le routeur et configurez les itinéraires:

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

imports: [
        RouterModule.forRoot([
            {path: '', component: DashboardComponent},
            {path: 'dashboard', component: DashboardComponent}
        ])
    ],
 

Mise à jour :

Déplacez le AppRoutingModule pour être le premier dans les importations:

 imports: [
    AppRoutingModule.
    BrowserModule,
    FormsModule,
    HttpModule,
    AlertModule.forRoot(), // What is this?
    LayoutModule,
    UsersModule
  ],
 

16voto

cchapman Points 1459

J'ajouterai un autre cas où j'obtiendrais la même erreur mais juste un mannequin. J'avais ajouté [routerLinkActiveOptions]="{exact: true}" sans encore ajouter routerLinkActive="active" .

Mon code incorrect était

 <a class="nav-link active" routerLink="/dashboard" [routerLinkActiveOptions]="{exact: true}">
  Home
</a>
 

quand cela aurait dû être

 <a class="nav-link active" routerLink="/dashboard" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">
  Home
</a>
 

Sans avoir routerLinkActive , vous ne pouvez pas avoir routerLinkActiveOptions .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X