angular - 'router-outlet' nu este un element cunoscut


Am un proiect MVC 5 cu un frontend Angular. Am vrut să adaug rutare așa cum este descris în acest tutorial https://angular.io/guide/router. Așadar, în _Layout.cshtml am adăugat un

<base href="/">

și am creat rutarea în app.module-ul meu. Dar când rulez asta, primesc următoarea eroare:

Error: Template parse errors:
    'router-outlet' is not a known element:
    1. If 'router-outlet' is an Angular component, then verify that it is part       of this module.
    2. If 'router-outlet' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA'   to the '@NgModule.schemas' of this component to suppress this message. ("
    <a routerLink="/dashboard">dashboard</a>
    </nav>
    [ERROR ->]<router-outlet></router-outlet>
     "): ng:///AppModule/AppComponent.html@5:0

În app.component-ul meu linia

<router-outlet></router-outlet>

dă o eroare spunându-mi că Visual Studio nu poate rezolva tag-ul 'router-outlet'. Aveți sugestii cum pot să rezolv această eroare? Îmi lipsește o referință sau un import sau doar trec cu vederea ceva?

Mai jos se află fișierele mele package.json, app.component și app.module

package.json:

{
    "version": "1.0.0",
    "name": "app",
    "private": true,
    "scripts": {},
    "dependencies": {
    "@angular/common": "^4.2.2",
    "@angular/compiler": "^4.2.2",
    "@angular/core": "^4.2.2",
    "@angular/forms": "^4.2.2",
    "@angular/http": "^4.2.2",
    "@angular/platform-browser": "^4.2.2",
    "@angular/platform-browser-dynamic": "^4.2.2",
    "@angular/router": "^4.2.2",
    "@types/core-js": "^0.9.41",
    "angular-in-memory-web-api": "^0.3.2",
    "bootstrap": "^3.3.7",
    "core-js": "^2.4.1",
    "graceful-fs": "^4.0.0",
    "ie-shim": "^0.1.0",
    "minimatch": "^3.0.4",
    "reflect-metadata": "^0.1.10",
    "rxjs": "^5.0.1",
    "systemjs": "^0.20.12",
    "zone.js": "^0.8.12"
    },
    "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-clean": "^0.3.2",
    "gulp-concat": "^2.6.1",
    "gulp-tsc": "^1.3.2",
    "gulp-typescript": "^3.1.7",
    "path": "^0.12.7",
    "typescript": "^2.3.3"
    }
}

app.module.ts:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { RouterModule, Routes } from '@angular/router';

import { AppComponent } from './app.component';
import {DashboardComponent} from "./dashboard/dashboard.component"    

const appRoutes: Routes = [
{
    path: '',
    redirectTo: '/dashboard',
    pathMatch: 'full',
    component: DashboardComponent
},  
{
    path: 'dashboard',
    component: DashboardComponent
}
];
@NgModule({
imports: [
    RouterModule.forRoot(appRoutes),
    BrowserModule,
    FormsModule               
],
exports: [RouterModule],
declarations: [
    AppComponent,  
    DashboardComponent      
],
bootstrap: [AppComponent]
})
export class AppModule {

}

app.component.ts:

import { Component } from '@angular/core';

@Component({
selector: 'my-app',
template: `
          <h1>{{title}}</h1>
          <nav>
          <a routerLink="/dashboard">dashboard</a>
          </nav>
          <router-outlet></router-outlet>
          `
})
export class AppComponent {
    title = 'app Loaded';

}

Răspuns #1

Încearcă asta:

Importați RouterModule în app.module.ts

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

Adaugă RouterModule în imports []

așa:

 imports: [    RouterModule,  ]

Răspuns #2

Încearcă cu:

@NgModule({
  imports: [
      BrowserModule,
      RouterModule.forRoot(appRoutes),
      FormsModule               
  ],
  declarations: [
      AppComponent,  
      DashboardComponent      
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Nu este nevoie să configurați exporturile în AppModule, deoarece AppModule nu va fi importat de alte module din aplicația dumneavoastră.

Răspunsul #3

Pentru cei care au deja RoutingModule importat în modulul părinte, uneori problema este cauzată de faptul că nu a fost adăugat componentul cu <router-outlet></router-outlet> în declarațiile modulului.

main.component.html

<router-outlet></router-outlet>

main.module.ts

import { MainComponent } from './main.component';
import { SharedModule } from './../shared/shared.module';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { MainRoutingModule } from './main-routing.module';
import { RouterModule } from '@angular/router';


@NgModule({
  declarations: [
    MainComponent // <----- DON'T FORGET TO DECLARE THIS
  ],
  imports: [
    CommonModule,
    SharedModule,
    RouterModule,
    MainRoutingModule
  ]
})
export class MainModule { }

Răspunsul #4

Dacă faci teste unitare și primești această eroare, atunci importă RouterTestingModule în fișierul tău app.component.spec.ts sau în interiorul fișierelor spec.ts ale componentelor tale speciale:

import { RouterTestingModule } from '@angular/router/testing';

Adaugă RouterTestingModule în imports: [] astfel

describe('AppComponent', () => {

  beforeEach(async(() => {    
    TestBed.configureTestingModule({    
      imports: [    
        RouterTestingModule    
      ],
      declarations: [    
        AppComponent    
      ],    
    }).compileComponents();    
  }));

Răspunsul #5

Presupunând că folosești Angular 6 cu angular-cli și ai creat un modul de rutare separat care este responsabil de activitățile de rutare - configurează-ți rutele în array-ul Routes. Asigură-te că declari RouterModule în array-ul de exports. Codul ar arăta astfel:

@NgModule({
      imports: [
      RouterModule,
      RouterModule.forRoot(appRoutes)
     // other imports here
     ],
     exports: [RouterModule]
})
export class AppRoutingModule { }

Răspunsul #6

Funcționează pentru mine, când adaug următorul cod în app.module.ts

@NgModule({
...,
   imports: [
     AppRoutingModule
    ],
...
})

Răspuns #7

Uneori această eroare apare fără motiv, care se rezolvă prin deschiderea și închiderea IDE-ului tău.