'router-outlet' 不是已知元素
'router-outlet' is not a known element
我有一个带有 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.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: [
BrowserModule,
RouterModule.forRoot(appRoutes),
FormsModule
],
declarations: [
AppComponent,
DashboardComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
无需在 AppModule
中配置导出,因为 AppModule
不会被您应用程序中的其他模块导入。
当我在 app.module.ts
中添加以下代码时,它对我有用
@NgModule({
...,
imports: [
AppRoutingModule
],
...
})
试试这个:
将 RouterModule
导入您的 app.module.ts
import { RouterModule } from '@angular/router';
将 RouterModule
添加到您的 imports []
像这样:
imports: [ RouterModule, ]
最好创建一个路由组件来处理您的所有路由!来自 angular 网站文档!这是很好的做法!
ng 生成模块 app-routing --flat --module=app
上面的 CLI 生成了一个路由模块并添加到你的应用程序模块,你需要从生成的组件中做的就是声明你的路由,也不要忘记添加这个:
exports: [
RouterModule
],
到你的 ng-module 装饰器,因为默认情况下它不附带生成的应用程序路由模块!
假设您将 Angular 6 与 angular-cli 一起使用,并且您已经创建了一个单独的路由模块来负责路由活动 - 在 Routes array.Make 中配置您的路由确保您在 exports 数组中声明 RouterModule。
代码如下所示:
@NgModule({
imports: [
RouterModule,
RouterModule.forRoot(appRoutes)
// other imports here
],
exports: [RouterModule]
})
export class AppRoutingModule { }
感谢 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]
})
我也遇到过这个问题。
简单的技巧。
@NgModule({
imports: [
.....
],
declarations: [
......
],
providers: [...],
bootstrap: [...]
})
像上面那样使用它 order.first 导入然后 declarations.It 为我工作。
在您的 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 {
}
添加此代码。
快乐编码。
如果您正在进行单元测试并遇到此错误,请将 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();
}));
如果有人遇到错误,这里是快速简单的解决方案:
"'router-outlet' is not a known element" in angular project,
然后,
只需转到 "app.module.ts" 文件并添加以下行:
import { AppRoutingModule } from './app-routing.module';
还有 'AppRoutingModule' 进口。
有两种方法。
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 { }
- 如果你想实现
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 { }
在我的例子中,这是因为 RouterModule 在导入中丢失了。
对于那些已经在父模块中导入了 RoutingModule
的模块,有时问题是由于未在模块声明中添加带有 <router-outlet></router-outlet>
的组件引起的。
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 { }
我找到了适合我的解决方案。为了测试,我创建了一个运行良好的新项目,然后逐渐消除了 app.component.html 中除了路由器插座线之外的所有内容。
这始终导致此错误。
我使用的是 VSCODE 版本 1。53.x 所以我升级到 1.54(2021 年 2 月),问题消失了。
我只在 VS Code 中遇到过这个问题,运行 ng serve
或 ng build --prod
工作正常。
对我来说解决问题的方法是禁用 Angular 语言服务 扩展(angular.ng-template
)然后重新启用它。
如果您手动创建 app-routing.module.ts
或使用 CLI 以外的工具来创建,则需要将 AppRoutingModule
导入 app.module.ts
并将其添加到导入数组的 NgModule。
使用 CLI 运行 创建 app-routing.module.ts
这个:
ng generate module app-routing --flat --module=app
在我的案例中,延迟加载是一个错误。我指向路由模块,但它应该指向拥有路由模块的模块。
错误
const routes: Routes = [
{
path: 'Login',
loadChildren: ()=> import('./login/login-routing.module.ts').then(m=> m.LoginRoutingModule)
}
]
对
const routes: Routes = [
{
path: 'Login',
loadChildren: ()=> import('./login/login.module.ts').then(m=> m.LoginModule)
}
]
有时会无缘无故出现这个错误,通过打开和关闭你的IDE.
解决了
我有一个带有 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.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: [
BrowserModule,
RouterModule.forRoot(appRoutes),
FormsModule
],
declarations: [
AppComponent,
DashboardComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
无需在 AppModule
中配置导出,因为 AppModule
不会被您应用程序中的其他模块导入。
当我在 app.module.ts
中添加以下代码时,它对我有用@NgModule({ ..., imports: [ AppRoutingModule ], ... })
试试这个:
将 RouterModule
导入您的 app.module.ts
import { RouterModule } from '@angular/router';
将 RouterModule
添加到您的 imports []
像这样:
imports: [ RouterModule, ]
最好创建一个路由组件来处理您的所有路由!来自 angular 网站文档!这是很好的做法!
ng 生成模块 app-routing --flat --module=app
上面的 CLI 生成了一个路由模块并添加到你的应用程序模块,你需要从生成的组件中做的就是声明你的路由,也不要忘记添加这个:
exports: [
RouterModule
],
到你的 ng-module 装饰器,因为默认情况下它不附带生成的应用程序路由模块!
假设您将 Angular 6 与 angular-cli 一起使用,并且您已经创建了一个单独的路由模块来负责路由活动 - 在 Routes array.Make 中配置您的路由确保您在 exports 数组中声明 RouterModule。 代码如下所示:
@NgModule({
imports: [
RouterModule,
RouterModule.forRoot(appRoutes)
// other imports here
],
exports: [RouterModule]
})
export class AppRoutingModule { }
感谢 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]
})
我也遇到过这个问题。 简单的技巧。
@NgModule({
imports: [
.....
],
declarations: [
......
],
providers: [...],
bootstrap: [...]
})
像上面那样使用它 order.first 导入然后 declarations.It 为我工作。
在您的 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 {
}
添加此代码。 快乐编码。
如果您正在进行单元测试并遇到此错误,请将 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();
}));
如果有人遇到错误,这里是快速简单的解决方案:
"'router-outlet' is not a known element" in angular project,
然后,
只需转到 "app.module.ts" 文件并添加以下行:
import { AppRoutingModule } from './app-routing.module';
还有 'AppRoutingModule' 进口。
有两种方法。
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 { }
- 如果你想实现
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 { }
在我的例子中,这是因为 RouterModule 在导入中丢失了。
对于那些已经在父模块中导入了 RoutingModule
的模块,有时问题是由于未在模块声明中添加带有 <router-outlet></router-outlet>
的组件引起的。
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 { }
我找到了适合我的解决方案。为了测试,我创建了一个运行良好的新项目,然后逐渐消除了 app.component.html 中除了路由器插座线之外的所有内容。 这始终导致此错误。 我使用的是 VSCODE 版本 1。53.x 所以我升级到 1.54(2021 年 2 月),问题消失了。
我只在 VS Code 中遇到过这个问题,运行 ng serve
或 ng build --prod
工作正常。
对我来说解决问题的方法是禁用 Angular 语言服务 扩展(angular.ng-template
)然后重新启用它。
如果您手动创建 app-routing.module.ts
或使用 CLI 以外的工具来创建,则需要将 AppRoutingModule
导入 app.module.ts
并将其添加到导入数组的 NgModule。
使用 CLI 运行 创建 app-routing.module.ts
这个:
ng generate module app-routing --flat --module=app
在我的案例中,延迟加载是一个错误。我指向路由模块,但它应该指向拥有路由模块的模块。
错误
const routes: Routes = [
{
path: 'Login',
loadChildren: ()=> import('./login/login-routing.module.ts').then(m=> m.LoginRoutingModule)
}
]
对
const routes: Routes = [
{
path: 'Login',
loadChildren: ()=> import('./login/login.module.ts').then(m=> m.LoginModule)
}
]
有时会无缘无故出现这个错误,通过打开和关闭你的IDE.
解决了