2016-11-09 4 views
4

я решил поставить LoginComponent, AuthService, LoggedInGuard внутри модуля под названием AuthModule:Угловое 2 - Экспорт Auth Services из AuthModule в AppModule

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 has no exported member 'LoggedInGuard'

Если я указываю его в нужном месте:

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

собирает, но показывает следующее сообщение об ошибке во время выполнения:

Unexpected value 'AuthService' exported by the module 'AuthModule'

Что вы предложить мне?

Заранее спасибо.

ответ

9

exports не предназначен для предоставления услуг. Достаточно добавить сервисы на providers. Поэтому удалите AuthService и AuthGuard с exports.

exportsis for предназначен для изготовления компонентов, трубопроводов, директив и других модулей, доступных для других модулей. Поэтому вам нужно добавить AuthComponent и LoginComponent, чтобы вы могли использовать их в других модулях.

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

отметить также, что импортирование AuthModule к AppModule, только делает компоненты, доступные для других компонентов, объявленных в AppModule. Любые другие модули, которые хотят использовать эти компоненты, должны импортировать AuthModule.

+0

Хотя вы правы в том, как сделать эту работу, утверждение, что «экспорт не для служб», неверен. Экспорт предназначен для того, чтобы любой класс был доступен для внешнего мира. –

+1

@BoyanKostadinov Вы имеете в виду файл 'export' или' @ NgModule.exports'. Если последнее, я бы хотел увидеть документацию по этому поводу. Если первое, мы на самом деле говорим о последнем здесь: -P '@ NgModule.providers' уже делает его глобальным для внешнего мира, в смысле области приложения –

+0

Я понимаю, что вы сейчас имеете в виду. Вы имели в виду массив «export» в метаданных модуля. Я имел в виду ключевое слово «экспорт». –

 Смежные вопросы

  • Нет связанных вопросов^_^