angularフロントエンドを持つmvc 5プロジェクトがあります。このチュートリアルで説明されているようにルーティングを追加したかった https://angular.io/guide/router 。だから私の_Layout.cshtmlに追加しました
<base href="/">
app.moduleにルーティングを作成しました。しかし、これを実行すると、次のエラーが表示されます。
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
私のapp.componentの行
<router-outlet></router-outlet>
visual Studioがタグ 'router-outlet'を解決できないことを示すエラーを表示します。このエラーを修正する方法はありますか?参照またはインポートがないか、何かを見落としているだけですか?
以下は私のpackage.json、app.componentおよび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:
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:
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: [
BrowserModule,
RouterModule.forRoot(appRoutes),
FormsModule
],
declarations: [
AppComponent,
DashboardComponent
],
bootstrap: [AppComponent]
})
export class AppModule {
}
AppModule
はアプリケーションの他のモジュールによってインポートされないため、AppModule
でエクスポートを構成する必要はありません。
これを試してください:
RouterModule
をapp.module.ts
にインポートします
import { RouterModule } from '@angular/router';
RouterModule
をimports []
に追加します
このように:
imports: [ RouterModule, ]
単体テストを行っているときにこのエラーが発生した場合は、RouterTestingModule
をapp.component.spec.tsにインポートするか、機能コンポーネントのspec.tsにインポートしてください。
import { RouterTestingModule } from '@angular/router/testing';
Add RouterTestingModule into your imports [] like
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [
AppComponent
],
}).compileComponents();
}));
Angular-cliでAngular 6を使用しており、ルーティングアクティビティを担当する別のルーティングモジュールを作成したと仮定します-Routes配列でルートを構成します。exports配列でRouterModuleを宣言していることを確認してください。コードは次のようになります。
@NgModule({
imports: [
RouterModule,
RouterModule.forRoot(appRoutes)
// other imports here
],
exports: [RouterModule]
})
export class AppRoutingModule { }
App.module.tsに次のコードを追加すると、うまくいきます
@NgModule({ ..., imports: [ AppRoutingModule ], ... })
ヒーローエディタの例に感謝します。正しい定義が見つかりました。
アプリルーティングモジュールを生成する場合:
ng generate module app-routing --flat --module=app
app-routing.tsファイルを更新して以下を追加します。
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
完全な例を次に示します。
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 {}
app.RoutingModuleをapp.module.tsインポートに追加します。
@NgModule({
declarations: [
AppComponent,
...
],
imports: [
BrowserModule,
FormsModule,
AppRoutingModule
],
providers: [...],
bootstrap: [AppComponent]
})
すべてのルートを処理するルーティングコンポーネントを作成することをお勧めします。 angular Webサイトのドキュメントから!それは良い習慣です!
ng generate module app-routing --flat --module = app
上記のCLIはルーティングモジュールを生成し、アプリモジュールに追加します。生成されたコンポーネントから行う必要があるのは、ルートを宣言することだけです。これも忘れずに追加してください。
exports: [
RouterModule
],
ng-moduleデコレータには、デフォルトで生成されたapp-routingモジュールが付属していないためです!
この問題は私にもありました。それのための簡単なトリック。
@NgModule({
imports: [
.....
],
declarations: [
......
],
providers: [...],
bootstrap: [...]
})
上記の順序で使用します。最初にインポートしてから宣言します。
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 {
}
このコードを追加します。ハッピーコーディング。
誰かがエラーを受け取っている場合の迅速で簡単な解決策は次のとおりです。
angularプロジェクトの「 'router-outlet'は既知の要素ではありません」、
次に、
「app.module.ts」ファイルに移動して、次の行を追加します。
import { AppRoutingModule } from './app-routing.module';
また、インポートの「AppRoutingModule」。