2017-02-22 3 views
1

Ich habe meine Hauptmodul wie dieser, wo ich die grundlegenden Bibliotheken importieren:Angular 2 Imports

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { MaterialModule } from '@angular/material'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 

import { MapModule } from './map/map.module'; 

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

@NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    MapModule, 
    MaterialModule.forRoot() 
    ], 
    providers: [], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

Meine Frage ist, wenn ich eine neue Module innerhalb der App dh Kartenmodul muss ich alles neu importieren diese Bibliotheken zu diesem Modul. Ich hatte den Eindruck, dass, wenn ich die Bibliotheken auf dem Modul importiere, es unter untergeordneten Modulen funktionieren würde.

Aber in meinem Kartenmodul bekomme ich Fehler wie.

Can't bind to 'ngClass' since it isn't a known property of 'div'. 

Mein Aktueller mapModule sieht aus wie

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

import { MapComponent } from './map.component'; 
import { MapMenuComponent } from './map-menu/map-menu.component'; 
import { MapControlsComponent } from './map-controls/map-controls.component'; 
import { MapService } from './map.service'; 


@NgModule({ 
    imports: [], 
    exports: [], 
    declarations: [MapMenuComponent, MapControlsComponent, MapComponent], 
    providers: [MapService], 
}) 
export class MapModule { } 

Muß ich die MaterialModule zu reimportieren, Formulare usw. in dem Modul wieder für die Komponenten in diesem Modul zu arbeiten?

Antwort

3

Sie müssen nur Module mit Deklarationen neu importieren, d. H. Module, die neue Komponenten, Anweisungen und Pipes definieren. Module, die Anbieter registrieren, müssen nicht importiert werden.

In dieser Liste:

imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    MapModule, 
    MaterialModule.forRoot() 
    ], 

FormsModule Module müssen durch HttpModule muss nicht importiert werden. BrowserModule Re-Exporte CommonModule, so in den anderen Modulen möchten Sie wahrscheinlich CommonModule, nicht BrowserModule importieren, um integrierte Anweisungen wie NgClass zu bekommen. Durch CommonModule Importieren Sie diesen Fehler nicht haben:

Can't bind to 'ngClass' since it isn't a known property of 'div'.

+2

Ah gotcha, und ich Bündler erraten wie webpack sind schlau genug, diese Module wie Material und Formulare nur einmal im Bundle und nicht mehrfach zu platzieren. – StevieB

+0

Danke Mann für die gut erklärte Antwort, ich fand dieses Szenario in ihrer Dokumentation fehlt. – StevieB

+0

@StevieB, sicher, Bündler oder andere Lader wie Systemjs wird das Modul nur einmal importieren. Ja, dieser Teil ist in den Dokumenten unklar. Was noch schlimmer ist, sie enthalten keine Quellen im npm-Paket, also müssen Sie nach github gehen, um zu überprüfen, welche Module Deklarationen haben. –

0

Sie SharedModule verwenden können. Alle Module sind diejenigen, in mehreren Modulen verwendet

sharedModule Beispiel

import { NgModule } from '@angular/core'; 
import { anyService} from './any.service'; 

@NgModule({ 
    providers: [anyService] 
}) 
export class SharedModule {} 

Jetzt können Sie diese gemeinsam genutzte Modul importieren in allen Modulen, in denen dieses Modul verwenden möchten