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.
