10

我决定将 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 方法。和 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 没有导出成员“LoggedInGuard”

如果我将它指向正确的位置:

import { LoggedInGuard } from './core/auth/guards/logged-in.guard';

它编译,但显示以下运行时错误:

模块“AuthModule”导出的意外值“AuthService”

你有什么建议吗?

提前致谢。

4

1 回答 1

23

exports不是为了服务。添加服务providers就足够了。所以从. AuthService_AuthGuardexports

exports 目的是使组件、管道、指令和其他模块可以被其他模块访问。因此,您需要添加AuthComponent, 并且LoginComponent您希望能够在其他模块中使用它们。

@NgModule({
  imports: [
    CommonModule
  ],
  providers: [AuthService, LoggedInGuard],
  declarations: [AuthComponent, LoginComponent],
  exports: [AuthComponent, LoginComponent]
})
export class AuthModule { }

另请注意,将 导入AuthModule到 中AppModule,只会使组件可用于在 中声明的其他组件AppModule。任何其他想要使用这些组件的模块都应该导入AuthModule.

于 2016-11-09T00:35:18.463 回答