Mam projekt MVC 5 z kątową nakładką. Chciałem dodać routing zgodnie z opisem w tym samouczku https://angular.io/guide/router . Więc w moim _Layout.cshtml
dodałem
<base href="/">
i utworzyłem mój routing w moim module app.module. Ale kiedy to uruchamiam, pojawia się następujący błąd:
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
W moim komponencie app.component linia
<router-outlet></router-outlet>
wyświetla błąd informujący mnie, że program Visual studio nie może rozpoznać tagu „router-outlet”. Jakieś sugestie, jak mogę naprawić ten błąd? Czy brakuje mi referencji lub importu lub po prostu coś przeoczę?
Poniżej znajdują się moje 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';
}
@NgModule({ imports: [ RouterModule.forRoot(appRoutes) ], exports: [ RouterModule ] })
Otrzymałem ten sam błąd i to rozwiązało mój problem.Spróbuj tego:
Zaimportuj
RouterModule
do swojegoapp.module.ts
import { RouterModule } from '@angular/router';
Dodaj
RouterModule
do swojegoimports []
lubię to:
źródło
'router-outlet' is not a known element
problem. dlaAngular CLI version: 6.0.8
iAngular version: 6.0.5
Jeśli wykonujesz testy jednostkowe i otrzymujesz ten błąd, zaimportuj
RouterTestingModule
do swoichapp.component.spec.ts
lub wewnątrz polecanych komponentów 'spec.ts
:import { RouterTestingModule } from '@angular/router/testing';
Dodaj
RouterTestingModule
do swojegoimports: []
polubieniadescribe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ RouterTestingModule ], declarations: [ AppComponent ], }).compileComponents(); }));
źródło
Zakładając, że używasz Angulara 6 z angular-cli i utworzyłeś oddzielny moduł routingu, który jest odpowiedzialny za działania routingu - skonfiguruj swoje trasy w tablicy Routes Upewnij się, że deklarujesz RouterModule w tablicy export. Kod wyglądałby tak:
@NgModule({ imports: [ RouterModule, RouterModule.forRoot(appRoutes) // other imports here ], exports: [RouterModule] }) export class AppRoutingModule { }
źródło
U mnie działa, gdy dodam następujący kod w app.module.ts
źródło
Dziękuję za przykład edytora Hero, w którym znalazłem poprawną definicję:
Kiedy generuję moduł routingu aplikacji:
ng generate module app-routing --flat --module=app
i zaktualizuj plik app-routing.ts, aby dodać:
@NgModule({ imports: [ RouterModule.forRoot(routes) ], exports: [ RouterModule ] })
Oto pełny przykład:
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { DashboardComponent } from './dashboard/dashboard.component'; import { HeroesComponent } from './heroes/heroes.component'; import { HeroDetailComponent } from './hero-detail/hero-detail.component'; const routes: Routes = [ { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, { path: 'dashboard', component: DashboardComponent }, { path: 'detail/:id', component: HeroDetailComponent }, { path: 'heroes', component: HeroesComponent } ]; @NgModule({ imports: [ RouterModule.forRoot(routes) ], exports: [ RouterModule ] }) export class AppRoutingModule {}
i dodaj AppRoutingModule do importu app.module.ts:
@NgModule({ declarations: [ AppComponent, ... ], imports: [ BrowserModule, FormsModule, AppRoutingModule ], providers: [...], bootstrap: [AppComponent] })
źródło
Po prostu lepiej jest utworzyć komponent routingu, który obsługiwałby wszystkie Twoje trasy! Z dokumentacji strony kątowej! To dobra praktyka!
ng generuje routing aplikacji modułu --flat --module = app
Powyższy CLI generuje moduł routingu i dodaje do modułu aplikacji, wszystko, co musisz zrobić z wygenerowanego komponentu, to zadeklarować swoje trasy, również nie zapomnij dodać tego:
exports: [ RouterModule ],
do dekoratora ng-module, ponieważ domyślnie nie jest dostarczany z wygenerowanym modułem routingu aplikacji!
źródło
Istnieją dwa sposoby. 1. jeśli chcesz zaimplementować
app.module.ts
plik to:import { Routes, RouterModule } from '@angular/router'; const appRoutes: Routes = [ { path: '', component: HomeComponent }, { path: 'user', component: UserComponent }, { path: 'server', component: ServerComponent } ]; @NgModule({ imports: [ RouterModule.forRoot(appRoutes) ] }) export class AppModule { }
app-routing.module.ts
plik (Separated Routing Module), to://app-routing.module.ts import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; const appRoutes: Routes = [ { path: '', component: HomeComponent }, { path: 'users', component: UsersComponent }, { path: 'servers', component: ServersComponent } ]; @NgModule({ imports: [ RouterModule.forRoot(appRoutes) ], exports: [RouterModule] }) export class AppRoutingModule { } //................................................................ //app.module.ts import { AppRoutingModule } from './app-routing.module'; @NgModule({ imports: [ AppRoutingModule ] }) export class AppModule { }
źródło
W moim przypadku dzieje się tak, ponieważ podczas importu brakowało RouterModule .
źródło
Ten problem był ze mną również. Prosta sztuczka.
@NgModule({ imports: [ ..... ], declarations: [ ...... ], providers: [...], bootstrap: [...] })
użyj go jak w powyższej kolejności. najpierw importuje, a potem deklaracje. u mnie zadziałało.
źródło
W pliku app.module.ts
import { RouterModule, Routes } from '@angular/router'; const appRoutes: Routes = [ { path: '', redirectTo: '/dashboard', pathMatch: 'full', component: DashboardComponent }, { path: 'dashboard', component: DashboardComponent } ]; @NgModule({ imports: [ BrowserModule, RouterModule.forRoot(appRoutes), FormsModule ], declarations: [ AppComponent, DashboardComponent ], bootstrap: [AppComponent] }) export class AppModule { }
Dodaj ten kod. Miłego kodowania.
źródło
Oto szybkie i proste rozwiązanie, jeśli ktoś napotyka błąd:
Następnie,
Po prostu przejdź do pliku „app.module.ts” i dodaj następujący wiersz:
import { AppRoutingModule } from './app-routing.module';
A także „AppRoutingModule” w imporcie.
źródło