2016-03-04 70 views
1

我擔心我可以在Angular2中導入衝突導入,我希望能夠提供一些指導。angular2一貫導入

在組件1,我有以下:

// Services 
//import {DataService} from './services/a2.DataService'; 
import {DataService} from '../../mocks/a2.mockDataService'; 

在組件2,我有以下:

// Services 
import {DataService} from './services/a2.DataService'; 
//import {DataService} from '../../mocks/a2.mockDataService'; 

這看似平淡我錯了。所以我想我是做錯了!

我曾預計在app/main/bootstrap組件中指定了一組一致的進口並由所有組件繼承;有點像stdafx.h無處不在。

指導請...

+0

這不僅僅是ES6模塊的工作原理。每個文件都是它自己的模塊,需要指定它自己的導入。另外,你的代碼有什麼問題,請不要讓我們猜測。 :) – toskv

回答

0

所以你在做什麼是正確的。 Angular2沒有IoC容器,例如php中的Laravel,但Angular2引導程序已經接近!但你可以用這種方式做一些很酷的事情。

因此,如果我們向我們的引導組件添加服務,那麼該服務與我們其他應用程序的服務相同。我的意思是這樣的:

exports class myGlobalClass{ 
    var myGlobalVariable = 'Cheese'; 
} 

當我調用這個類的任何其他模塊中(只要我自舉的話),我可以得到myGlobalVariable的價值,這是非常酷的原因是對於像觀測。有了observables,當我引導一個變量時,它可以讓我輕鬆地對整個應用程序進行狀態更改。

您仍然必須將其與import {myGlobalClass} from './globals'一起導入,但它在整個應用程序中都是相同的Class/Object。

但是如果我不希望我的整個應用程序中的所有內容都改變狀態更改?我能做些什麼來使它更「本地化」?

exports class myLocalClass{ 
    var myLocalVariable = 'Local Cheese'; 
} 

我會做一個導入到我的組件文件import {myLocalClass} from './locals'。這爲每個導入創建了一個獨立的類,以便您可以在不同視圖上使用此特定類,而不必擔心一個視圖會改變另一個視圖。

什麼可以使這一點更具挑戰性,但是如果我希望myLocalClass影響兩個不同的意見。 Angular2附帶了額外的工具,可以讓你做到這一點而不會太頭痛,但你可以更清楚地看到Angular2如何分離出來。

此外,要添加到toskv的評論,這是導入如何在ES6中工作。我不完全確定他們是否像使用Node一樣移植它,每個模塊只編譯一次並分發,或者每個模塊在每次調用時單獨編譯。我會假設後者,但我不完全確定,希望別人可以編鐘。