2017-01-17 8 views
6

Ich habe eine App, die mehrere Ansichten wie eine Tabellenkalkulation hat & andere ist die Zwei-Panel-Ansicht, für beide Ansichten Navigation, Suche & Filter werden gemeinsam sein. Also fügte ich ein gemeinsames Modul hinzu und importierte dieses Modul in das Hauptmodul &, das jetzt versucht, allgemeine Modulkomponenten in der Tabellenkalkulationskomponente zu verwenden. Nun unten ist mein Code, der das richtige Bild geben:Angular 2 mehrere Module

// Spreadsheet module - spreadsheet.module.ts 
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { Spreadsheet } from './components/spreadsheet.component'; 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ Spreadsheet ], 
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ] 
}) 
export class SpreadsheetModule { } 

// Common module - common.module.ts 
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { TopNavigation } from './components/header.component'; 
import { Search } from './components/search.component'; 
import { AccountInfo } from './services/accountInfo'; 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ TopNavigation, Search ], 
    providers: [ AccountInfo ], 
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ] 
}) 
export class CommonModule {} 

Jetzt bin ich den Import sowohl um dieses Modul zu einem Hauptmodul, das ist:

// App module - app.module.ts 
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { AppComponent } from './app.component'; 
import { CommonModule } from './common/common.module'; 
import { SpreadsheetModule } from './spreadsheet/spreadsheet.module'; 

@NgModule({ 
    imports: [ BrowserModule, CommonModule, SpreadsheetModule ], 
    declarations: [ AppComponent ], 
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ], 
    bootstrap: [ AppComponent ] 
}) 
export class AppModule { } 

Also in meiner Tabelle der Komponente, Ich versuche, Verwenden Sie Headers (TopNavigation) Vorlage wie <top-nav></top-nav> so sollte dies Header.html Inhalt angezeigt, aber es als leer. Es gibt auch keinen Fehler. Nicht sicher, was ich falsch mache.

Hinweis: Wenn ich TopNavigation in spreadsheet.module.ts direkt deklariere, funktioniert es gut. Aber da die Navigation und Suche gemeinsam ist ich will es nicht in jedem einzelnen Module erklären, dass nur in sein sollte app.module.ts

+0

Nicht sicher, was genau Sie wollen. – MMR

+0

@nlr_p Ich möchte 'header.component'-Vorlage in' talksheet.component' einfügen, so etwas wie ' 'also in obigem Fall' 'kommt leer. Aber wenn ich header.component direkt zu Spreadsheet.module deklariere wie 'Deklarationen: [Spreadsheet, TopNavigation],' es funktioniert gut –

Antwort

8

Zwei Dinge müssen hier zu tun:

Zuerst Export TopNavigation & Search Komponenten aus dem CommonModule so können sie in anderen Modulen verwendet werden:

// Common module - common.module.ts 
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { TopNavigation } from './components/header.component'; 
import { Search } from './components/search.component'; 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ TopNavigation, Search ], 
    exports: [ TopNavigation, Search ], 
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ] 
}) 
export class CommonModule {} 

Zweitens, die CommonModule sollte durch das Modul importiert werden, die es tatsächlich nutzt. In Ihrem Fall sollte das SpreadSheet Modul importieren CommonModule

// Spreadsheet module - spreadsheet.module.ts 
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { Spreadsheet } from './components/spreadsheet.component'; 
import { CommonModule } from './common/common.module'; 

@NgModule({ 
    imports: [ BrowserModule, CommonModule], 
    declarations: [ Spreadsheet ], 
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ] 
}) 
export class SpreadsheetModule { } 

Module erben keine Komponenten in anderen Modulen deklariert sind. Wenn Sie also CommonModule in AppModule importieren, hat das keinen Effekt.

Sie können here für weitere Informationen lesen.

+0

Noch kein Glück, Ergebnis ist das gleiche ... –

+0

@DheerajAgrawal, siehe meine Bearbeitung. – Obaid

+0

jetzt bekomme ich diesen Fehler: 'Fehler: Fehler in ./Spreadsheet Klasse Spreadsheet - Inline-Vorlage: 0: 0 verursacht durch: Kein Provider für AccountInfo!. 'Tatsächlich habe ich einen Service, den ich in' common.module' hinzugefügt habe , Ich habe aktualisiert common.module in meiner Frage –