【问题标题】:How to import a service from another module in Angular 6如何从Angular 6中的另一个模块导入服务
【发布时间】:2019-05-14 01:18:57
【问题描述】:

技术:使用 angular 6、angular cli 和 typescript。

场景

我有一个应用模块和一个核心模块

我希望我的应用模块组件使用我的核心模块中的服务。

我的核心模块包含一个服务列表:

import { NgModule } from '@angular/core';

// Services
import { AuthService } from './services/auth.service';

@NgModule({
  declarations: [
  ],
  imports: [
  ],
  providers: [
    AuthService
  ]
})
export class CoreModule { }

这是我的应用模块:

import { BrowserModule } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';

import { AppComponent } from './app.component';

// Modules
import { CoreModule } from './core/core.module';

// Sections
import { COMPONENTS } from './components/index';
import { ROUTES } from './app.routes';

@NgModule({
  declarations: [
    AppComponent,
    COMPONENTS
  imports: [
    CommonModule,
    FormsModule,
    BrowserModule,
    HttpClientModule,
    ReactiveFormsModule,
    RouterModule.forRoot(ROUTES),
    CoreModule
  ],
  providers: [
  ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

注意:如您所见,我正在导入 CoreModule。

这是我的 app 模块中的组件(它调用核心模块来获取 AuthService):

import { Component } from '@angular/core';

// This Auth Service import not working (says service not exported)
import { AuthService } from '../../core/core.module';

@Component({
  selector: 'app-contact',
  templateUrl: './contact.component.html'
})
export class ContactComponent {

  constructor(
    private authService: AuthService
  ) {}
}

问题:我正在尝试将服务导入我的应用模块组件,称为联系人组件,如下所示:

import { AuthService } from '../../core/core.module';

我得到的错误:

服务不是核心模块的导出成员。

结果:我希望我的联系人组件从 app 模块导入名为 AuthService 的核心模块服务。

【问题讨论】:

  • 你们的服务是什么样的? (只是声明)
  • 你能回购这是一个小型测试堆栈闪电战吗?

标签: angular typescript angular6 angular-module


【解决方案1】:

如果模块在根模块中正确导入,我认为如果您将“export ... from ...”添加到您的 mymodule.module.ts:

import { MystuffService } from file 'mystuff.service'. 
export { MystuffService } from file 'mystuff.service'.

然后你可以导入你的服务:

import { MystuffService } from 'mymodule.module'

【讨论】:

    【解决方案2】:

    由于您已将 CoreModule 导入到 AppModule 中,因此您还贴上了 ContactComponent(似乎在 COMPONENTS 中),servicecomponent 这里属于同一个Module,所以可以互相看到。在您的ContactComponent 中要做的只是从其真实位置导入服务AuthService(而不是../../core/core.module

    import { AuthService } from ' <...>/auth.service';
    

    【讨论】:

    • 您不应该导出服务吗?
    • @DeborahK 怎么会?你不应该或者你不能?
    • 你应该不需要。请参阅此处的核心模块示例:angular.io/guide/styleguide#core-feature-module 请注意,它只导出组件,而不是服务。
    • @DeborahK,这是 Angular 的默认行为还是最近发生了变化?非常感谢您的提示。
    • @AngularM 正确。真的没有必要再使用核心模块了,尤其是使用 Injectable 装饰器的新 providedIn 属性(v6 中的新功能)。无需在AT ALL模块中注册服务。是的,StyleGuide 需要更新。
    猜你喜欢
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2020-05-18
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多