2017-06-20 76 views
0

我已经设置了这样的目录结构:角2导出服务从模块

app 
    |- core 
    | |_identity 
    | | |_identity.service.ts 
    | |_ http 
    |  |_apiClient.service.ts (service for interacting with my api) 
    |-user 
    | |- models 
    | | |-user.ts 
    | |- services 
    | |  | - user.service.ts 
    | |-listComponent 
    | 
    |-tenant 
     |-models 
     | |-tenant.ts 
     |- services 
      |- tenant.service.ts 
     .... 

我的两个tenant.service和我的user.service注入我ApiClient对象(即延伸的http服务)。问题是,要引用它,我要在我所有的组件,这些组件要注入其添加

import {ApiClient} from '../../../core/http/apiClient.service'

。我有一个core.module定义(并导入到我的app.module),并希望能够引用我的ApiClient,而不必知道目录结构(即我想能够导入它像HTTP服务与import {ApiClient} from '@core/http'

+0

这就是导入系统的工作原理。这不是一个问题。如果您使用Visual Studio代码,请安装自动导入扩展 - 它将为您生成这些导入。非常便利!!或者您使用的任何IDE的扩展名相似 – Ryan

回答

0

那是怎样模组分辨率的打字稿工作。

打字稿会模仿Node.js的运行时分辨率战略 为了在编译时来定位模块定义文件

了解更多关于它here

您可以为您的常用功能创建一个Angular库,然后使用package.json进行安装,以便像其他库一样,通用模块位于node_modules文件夹内。那么你可以很容易地使用所有的导出类型,而不需要知道目录路径,

import { ApiClient } from 'MyLib'; 

希望这有助于!

+1

这个关于“您可能创建一个Angular库”的帮助手册如何?它们不是它们是模块的库,使模块导出服务相对复杂。 “你可以创建一个图书馆”几乎没有帮助。 –

+0

@ RickO'Shea,我希望你不要混合[Angular Modules和Javascript Modules](https://angular.io/guide/ngmodule-faq#whats-the-difference-between-angular-and-javascript-modules) ,他们不同,我建议的解决方案是简单地创建JS模块,您可以查看我在解决方案中添加的链接。希望它也能帮助你,干杯! –

+0

这不是问题的有效解决方案。如果你看到这个答案,请不要使用它。通过npm/package.json来安装一个库来解决这个问题很可笑,老实说:-) – Ryan