「router-outlet」は既知の要素ではありません


98

角度のあるフロントエンドを備えたmvc5プロジェクトがあります。このチュートリアル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>

VisualStudioがタグ「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.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';

}

回答:


67

試してみてください:

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

アプリケーション内の他のモジュールによってインポートされないAppModuleため、でエクスポートを構成する必要はありませんAppModule


1
意味がわかりません
Jota.Toledo 2018

@ Jota.Toledoルートを定義したルーティング用に別のモジュールファイルを作成しました。また、app.moduleインポートにBrowserModule、FormsModule、routing-moduleファイルに3つすべてがあります。しかし、私はまだこのエラーを受け取っています。何かアドバイスはありますか?
ninja_md

1
@ninja_mdルーティングモジュールファイルにエクスポート宣言を追加しましたか?以下のように。 @NgModule({ imports: [ RouterModule.forRoot(appRoutes) ], exports: [ RouterModule ] }) 同じエラーが発生し、これで問題が修正されました。
MihirKagrana19年

80

これを試して:

にインポートRouterModuleするapp.module.ts

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

RouterModuleあなたに追加imports []

このような:

 imports: [    RouterModule,  ]

4
これで問題は解決しました'router-outlet' is not a known element。用Angular CLI version: 6.0.8およびAngular version: 6.0.5
シャムス

36

ユニットテストを行っていてこのエラーが発生した場合は、注目のコンポーネントまたはその内部にインポートRouterTestingModuleしてください。app.component.spec.tsspec.ts

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

RouterTestingModuleあなたのimports: []好きなものに追加

describe('AppComponent', () => {

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

3
あなたが私の日を救ってくれてありがとう。
ベト・シルバ

12

Angular6をangular-cliで使用していて、ルーティングアクティビティを担当する別のルーティングモジュールを作成したと仮定します-Routes配列でルートを構成します.exports配列でRouterModuleを宣言していることを確認してください。コードは次のようになります。

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

あなたの回答に記載されているように、ルーティング用に別のモジュールファイルを作成しました。また、app.moduleインポートにBrowserModule、FormsModule、AppRoutingファイルにRouterModuleがあります。しかし、私はまだこのエラーを受け取っています。手伝ってくれますか?
ninja_md

少しのコードが役に立ちます-ルーティングモジュール部分とアプリモジュール部分。
マニト

1
ninja_mdルーティングモジュールをapp.moduleimports配列にインポートします。2番目の変更は、exports配列の@NgModuleの下のルーティングモジュールで、ルーティング用に作成したモジュールファイルの名前を指定することです。これで問題が解決することを願っています。
M.Sharma

8

app.module.tsに次のコードを追加すると、うまくいきます

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

4

正しい定義を見つけたヒーローエディターの例に感謝します。

アプリルーティングモジュールを生成する場合:

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 {}

AppRoutingModuleをapp.module.tsインポートに追加します。

@NgModule({
  declarations: [
    AppComponent,
    ...
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AppRoutingModule
  ],
  providers: [...],
  bootstrap: [AppComponent]
})

1

すべてのルートを処理するルーティングコンポーネントを作成することをお勧めします。角度のあるウェブサイトのドキュメントから!それは良い習慣です!

ng generate module app-routing --flat --module = app

上記のCLIはルーティングモジュールを生成し、アプリモジュールに追加します。生成されたコンポーネントから行う必要があるのは、ルートを宣言することだけです。また、これを追加することを忘れないでください。

exports: [
    RouterModule
  ],

デフォルトでは生成されたアプリルーティングモジュールが付属していないため、ng-moduleデコレータに追加してください。


0

2つの方法があります。1.app.module.tsファイルを実装する場合:

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 { }

  1. app-routing.module.ts(分離ルーティングモジュール)ファイルを実装する場合は、次のようにします。

//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 { }


-1

この問題は私にもありました。そのための簡単なトリック。

 @NgModule({
  imports: [
   .....       
  ],
 declarations: [
  ......
 ],

 providers: [...],
 bootstrap: [...]
 })

上記の順序で使用します。最初にインポートしてから宣言します。これでうまくいきました。


-2

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 {

}

このコードを追加します。ハッピーコーディング。


-3

誰かがエラーを受け取った場合の迅速で簡単な解決策は次のとおりです。

角度プロジェクトの「 'router-outlet'は既知の要素ではありません」、

次に、

「app.module.ts」ファイルに移動して、次の行を追加するだけです。

import { AppRoutingModule } from './app-routing.module';

また、インポートでは「AppRoutingModule」。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.