Angular 2 - 将 Auth 服务从 AuthModule 导出到 AppModule
Angular 2 - Exporting Auth Services from AuthModule to AppModule
我决定将 LoginComponent、AuthService、LoggedInGuard 放入名为 AuthModule 的模块中:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AuthComponent } from './auth.component';
import { LoginComponent } from './components/login/login.component';
import { AuthService } from './services/auth/auth.service';
import { StorageService } from './services/storage/storage.service';
import { RequestService } from './services/request/request.service';
import { LoggedInGuard } from './guards/logged-in.guard';
@NgModule({
imports: [
CommonModule
],
providers: [AuthService, LoggedInGuard],
declarations: [AuthComponent, LoginComponent],
exports: [AuthService, LoggedInGuard]
})
export class AuthModule { }
我只想在应用程序的其余部分中使用 AuthService 方法。以及用于保护非 public 路由的 LoggedInGuard。
所以我尝试在 AppModule 中导入它们:
import { AuthModule } from './core/auth/auth.module';
@NgModule({
declarations: [AppComponent, HomeComponent],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule,
AuthModule,
RouterModule.forRoot(routes)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
但在 app.routes.ts 中,LoggedInGuard 不适用于此代码行:
import { LoggedInGuard } from './core/auth/auth.module';
它没有编译,它说:
...auth/auth.module has no exported member 'LoggedInGuard'
如果我将它指向正确的位置:
import { LoggedInGuard } from './core/auth/guards/logged-in.guard';
编译成功,但显示以下运行时错误:
Unexpected value 'AuthService' exported by the module 'AuthModule'
你有什么建议吗?
提前致谢。
exports
不适用于服务。将服务添加到 providers
就足够了。因此,从 exports
.
中删除 AuthService
和 AuthGuard
exports
是的目的是让组件、管道、指令和其他模块可以被其他模块访问。因此,您需要添加 AuthComponent
和 LoginComponent
,以便能够在其他模块中使用它们。
@NgModule({
imports: [
CommonModule
],
providers: [AuthService, LoggedInGuard],
declarations: [AuthComponent, LoginComponent],
exports: [AuthComponent, LoginComponent]
})
export class AuthModule { }
另请注意,将 AuthModule
导入 AppModule
只会使组件对 AppModule
中声明的其他组件可用。任何其他想要使用这些组件的模块都应该导入 AuthModule
.
我决定将 LoginComponent、AuthService、LoggedInGuard 放入名为 AuthModule 的模块中:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AuthComponent } from './auth.component';
import { LoginComponent } from './components/login/login.component';
import { AuthService } from './services/auth/auth.service';
import { StorageService } from './services/storage/storage.service';
import { RequestService } from './services/request/request.service';
import { LoggedInGuard } from './guards/logged-in.guard';
@NgModule({
imports: [
CommonModule
],
providers: [AuthService, LoggedInGuard],
declarations: [AuthComponent, LoginComponent],
exports: [AuthService, LoggedInGuard]
})
export class AuthModule { }
我只想在应用程序的其余部分中使用 AuthService 方法。以及用于保护非 public 路由的 LoggedInGuard。
所以我尝试在 AppModule 中导入它们:
import { AuthModule } from './core/auth/auth.module';
@NgModule({
declarations: [AppComponent, HomeComponent],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule,
AuthModule,
RouterModule.forRoot(routes)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
但在 app.routes.ts 中,LoggedInGuard 不适用于此代码行:
import { LoggedInGuard } from './core/auth/auth.module';
它没有编译,它说:
...auth/auth.module has no exported member 'LoggedInGuard'
如果我将它指向正确的位置:
import { LoggedInGuard } from './core/auth/guards/logged-in.guard';
编译成功,但显示以下运行时错误:
Unexpected value 'AuthService' exported by the module 'AuthModule'
你有什么建议吗?
提前致谢。
exports
不适用于服务。将服务添加到 providers
就足够了。因此,从 exports
.
AuthService
和 AuthGuard
exports
是的目的是让组件、管道、指令和其他模块可以被其他模块访问。因此,您需要添加 AuthComponent
和 LoginComponent
,以便能够在其他模块中使用它们。
@NgModule({
imports: [
CommonModule
],
providers: [AuthService, LoggedInGuard],
declarations: [AuthComponent, LoginComponent],
exports: [AuthComponent, LoginComponent]
})
export class AuthModule { }
另请注意,将 AuthModule
导入 AppModule
只会使组件对 AppModule
中声明的其他组件可用。任何其他想要使用这些组件的模块都应该导入 AuthModule
.