Angular 角度2路由-模块带NGV模块
我正在通过Angular 2进行一个平均项目,并且正在为我的各个页面设置路由。我见过很多使用ModuleWithProviders进行路由的示例,而不是使用NgModule()的angular.io示例 做事情的标准方式是什么?如果其中一个是可接受的,那么两者之间是否存在性能差异 ModuleWithProviders示例:Angular 角度2路由-模块带NGV模块,angular,angular2-routing,Angular,Angular2 Routing,我正在通过Angular 2进行一个平均项目,并且正在为我的各个页面设置路由。我见过很多使用ModuleWithProviders进行路由的示例,而不是使用NgModule()的angular.io示例 做事情的标准方式是什么?如果其中一个是可接受的,那么两者之间是否存在性能差异 ModuleWithProviders示例: import { ModuleWithProviders } from '@angular/core'; import {Routes, RouterModule} fro
import { ModuleWithProviders } from '@angular/core';
import {Routes, RouterModule} from '@angular/router';
import { AppComponent } from './app.component';
import { AboutComponent } from './about/about.component';
import { ServicesComponent } from './services/services.component';
export const router: Routes = [
{ path: '', redirectTo: 'about', pathMatch: 'full'},
{ path: 'about', component: AboutComponent },
{ path: 'services', component: ServicesComponent }
];
export const routes: ModuleWithProviders = RouterModule.forRoot(router);
NGO模块示例:
import { NgModule } from '@angular/core';
import {Routes, RouterModule} from '@angular/router';
import { AppComponent } from './app.component';
import { AboutComponent } from './about/about.component';
import { ServicesComponent } from './services/services.component';
export const router: Routes = [
{ path: '', redirectTo: 'about', pathMatch: 'full'},
{ path: 'about', component: AboutComponent },
{ path: 'services', component: ServicesComponent }
];
@NgModule({
imports: [
RouterModule.forRoot( router )
],
exports: [
RouterModule
]
})
export class AppRoutingModule {}
NgModule和ModuleWithProviders是不同的东西
NgModule
是模块类的装饰器
这应该由forRoot
方法返回ModuleWithProviders
对象是具有ngModule
属性的普通对象,该属性包含实际的模块类,并在providers
属性中添加了其他提供程序
由于ModuleWithProviders
是一个接口,它的使用是可选的。关于两者之间的区别是绝对正确的(@NgModule
是一个装饰器,而ModuleWithProvider
是一个接口),但实际上,您的问题的答案是哪种方法更好:
第二种方法更清晰、更常见且是最佳实践,因为它定义了单独模块中的路由,稍后将导入AppModule
:
export const routes: Routes = [
{ path: '', redirectTo: 'about', pathMatch: 'full'},
{ path: 'about', component: AboutComponent },
{ path: 'services', component: ServicesComponent }
];
const config: ExtraOptions = {
useHash: true
};
@NgModule({
imports: [RouterModule.forRoot(routes, config)],
exports: [RouterModule]
})
export class AppRoutingModule {}
RouterModule.forRoot(routes)
导入到AppModule
@NgModule({
declarations: [AppComponent],
imports: [AppRoutingModule],
bootstrap: [AppComponent],
})
export class AppModule {}
尽管上述内容很有希望回答了您的问题,但我还想指出在AppModule
中导入RouterModule
与子模块之间的区别:
对于AppModule
:
export const routes: Routes = [
{ path: '', redirectTo: 'about', pathMatch: 'full'},
{ path: 'about', component: AboutComponent },
{ path: 'services', component: ServicesComponent }
];
const config: ExtraOptions = {
useHash: true
};
@NgModule({
imports: [RouterModule.forRoot(routes, config)],
exports: [RouterModule]
})
export class AppRoutingModule {}
RouterModule.forRoot(routes)
对于子模块:
RouterModule.forChild(routes)
为什么?<代码>路由模块为您提供
- 组件(路由器出口)
- a指令(routerLink)
- 同时服务(激活路由以获取URL参数,路由器到 导航…)
forRoot
将提供路由器组件并提供路由器服务。但下一次在子模块中,forChild
将只提供路由器组件(不再提供服务,这些服务已通过应用程序模块导入提供)
想读更多吗?我觉得很了不起。谢谢你提供的信息,但我认为这个问题还没有完全回答。这两种方法中有一种更优越吗?我相信答案是肯定的。它们是苹果和桔子。他们的比较是不正确的。这个模块是真的。ModuleWithProviders是一种类型,它的使用是可选的,并且只影响TS类型检查。好的,但在声明路由时,这两种方法都起作用。更喜欢哪一种?准确地说,“ModuleWithProviders与NgModule”的比较是不正确的。对于示例,其中一个模块使用另一个模块包装路由。另一个没有。如果包含路由中使用的
提供程序
和声明
,则创建AppRoutingModule模块是有意义的。示例中没有显示这一点,因此AppRoutingModule在这里非常无用。当然,没有问题。