'router-outlet'은 알려진 요소가 아닙니다.


103

각도 프런트 엔드가있는 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.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';

}

답변:


71

시도해보십시오 :

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

의 수출을 구성 할 필요가 없습니다 AppModule때문에, AppModule습관이 응용 프로그램의 다른 모듈에서 가져가.


1
난 당신이 무슨 뜻인지 이해 해달라고
Jota.Toledo

@ Jota.Toledo 라우트를 정의한 라우팅을위한 별도의 모듈 파일을 만들었습니다. 또한 app.module 가져 오기에 BrowserModule, FormsModule이 있고 라우팅 모듈 파일에 세 가지가 모두 있습니다. 하지만 여전히이 오류가 발생합니다. 조언이 있습니까?
ninja_md

1
@ninja_md 라우팅 모듈 파일에 내보내기 선언을 추가 했습니까? 아래와 같습니다. @NgModule({ imports: [ RouterModule.forRoot(appRoutes) ], exports: [ RouterModule ] }) 나는 같은 오류가 발생했고 이것은 내 문제를 해결했습니다.
Mihir Kagrana

86

이 시도:

가져 오기 RouterModule에 당신의app.module.ts

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

추가 RouterModuleimports []

이렇게 :

 imports: [    RouterModule,  ]

5
'router-outlet' is not a known element좋습니다. 이것은 내 문제를 해결했습니다. for Angular CLI version: 6.0.8andAngular version: 6.0.5
Shams

37

단위 테스트를 수행하는 중이 오류가 발생하면 추천 구성 요소 또는 내부 RouterTestingModule로 가져 오기 app.component.spec.ts' spec.ts:

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

추가 RouterTestingModule귀하에 imports: []같은

describe('AppComponent', () => {

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

3
당신이 내 하루를 구 해주셔서 감사합니다.
Beto Silva

12

Angular 6을 angular-cli와 함께 사용하고 라우팅 활동을 담당하는 별도의 라우팅 모듈을 만들었다 고 가정하고 Routes 배열에서 경로를 구성합니다. 코드는 다음과 같습니다.

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

답변에서 언급했듯이 라우팅을 위해 별도의 모듈 파일을 만들었습니다. 또한 App.module 가져 오기에 BrowserModule, FormsModule이 있고 AppRouting 파일에 RouterModule이 있습니다. 하지만 여전히이 오류가 발생합니다. 도울 수 있니?
ninja_md

약간의 코드가 도움이 될 것입니다-라우팅 모듈 부분과 앱 모듈 부분.
Manit

1
ninja_md app.module에서 라우팅 모듈 가져 오기는 배열을 가져옵니다. 두 번째 변경 사항은 내보내기 배열의 @NgModule 아래 라우팅 모듈에서 라우팅을 위해 만든 모듈 파일의 이름을 제공한다는 것입니다. 이것이 당신의 문제를 해결하기를 바랍니다.
M.Sharma

8

app.module.ts에 다음 코드를 추가하면 나를 위해 작동합니다.

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

4

올바른 정의를 찾은 Hero Editor 예제 감사합니다.

앱 라우팅 모듈을 생성 할 때 :

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 생성 모듈 app-routing --flat --module = app

위의 CLI는 라우팅 모듈을 생성하고 앱 모듈에 추가합니다. 생성 된 구성 요소에서해야 할 일은 경로를 선언하는 것뿐입니다. 또한 다음을 추가하는 것을 잊지 마십시오.

exports: [
    RouterModule
  ],

기본적으로 생성 된 앱 라우팅 모듈과 함께 제공되지 않으므로 ng-module 데코레이터에 추가하십시오!


0

두 가지 방법이 있습니다. 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(Separated Routing Module) 파일 을 구현하려면 다음을 수행하십시오.

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


0

제 경우 에는 가져 오기에서 RouterModule 이 누락 되었기 때문에 발생 합니다.


-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

오류가 발생하는 경우 빠르고 간단한 솔루션은 다음과 같습니다.

각도 프로젝트에서 " '라우터 콘센트'는 알려진 요소가 아닙니다."

그때,

"app.module.ts"파일로 이동하여 다음 행을 추가하십시오.

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

또한 가져 오기의 'AppRoutingModule'도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.