2017-06-20 169 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