如何从角度2中的模块导出服务?
我的想法是,当我导入到另一个组件时,我希望导入与实际服务位置无关,它应该是模块的可复制性来管理
Core.module.ts:
import {
NgModule,
Optional, SkipSelf } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MyApi } from './Api/myApi.service';
import { AuthenticationModule } from './authentication/authentication.module';
@NgModule({
imports: [
CommonModule,
AuthenticationModule
],
providers: [
MyApi
],
exports: [MyApi, AuthenticationModule]
})
export class CoreModule {
constructor( @Optional() @SkipSelf() parentModule: CoreModule) {
if (parentModule) {
throw new Error(
'CoreModule is already loaded. Import it in the AppModule only');
}
}
}
App.component.ts:
import { Router, ActivatedRoute } from '@angular/router';
import { Component, ViewContainerRef, OnInit } from '@angular/core';
import { MyApi } from 'core.module'; //i want this to be the core module import, not './core/api/myApi.service'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor ( public service: MyApi) {
service.doStuff()
}
}
但是在上面的代码示例中,它告诉我MyApi不是由Core.module导出的。
这是一些伪代码,请原谅我所做的小错误:)
答案 0 :(得分:1)
您必须将此行添加到core.module
export {MyApi} from './Api/myApi.service';
答案 1 :(得分:1)
您可以采取两项措施使您的导入更加简洁:
您可以从入口点文件导出所有内容(按惯例,通常称为index.ts
),然后导入您从该文件导出的任何类:
import { NgModule } from '@angular/core';
import { ApiService } from 'path/to/api.service';
@NgModule({ ... })
export class CoreModule {}
export * from 'path/to/api.service';
这样您就可以从同一条路线导入CoreModule
和ApiService
,如下所示:
import { CoreModule, ApiService } from 'path/to/core.module;'
因此,您拥有所有模块依赖项的公共入口点。
如果您的模块是深层嵌套的,或者您想从最终可能来回移动几个目录的位置导入它,您始终可以在主{{1}中为该路径创建别名} {},tsconfig.json
下的文件:
compilerOptions.paths
然后使用该别名:
{
"compilerOptions": {
// ...
"paths": {
"@app-core": ["app/path/to/deeply/nested/core.module"]
}
}
}