2016-08-26 12 views
14

रूट स्तर पर आयात वैश्विक स्तर पर उपलब्ध नहीं होना चाहिए (वैश्विक स्तर पर मेरा सभी मॉड्यूल और घटकों का मतलब है)?रूट स्तर के आयात के साथ कोणीय 2 ऐप मॉड्यूल

मैं निम्नलिखित जड़/एप्लिकेशन मॉड्यूल है:

:

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule, ApplicationRef } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { FormsModule } from '@angular/forms'; 
import { AppComponent } from './app.component'; 
import { HttpModule } from '@angular/http'; 
import { RouterModule } from '@angular/router'; 
import { appRouterProviders, routing } from './app.routes'; 
import { DashboardModule } from './dashboard/dashboard.module'; 
import { DecisionModule } from './decision/decision.module'; 
import { MdCoreModule }   from '@angular2-material/core'; 
import { MdButtonModule }   from '@angular2-material/button'; 
import { MdCardModule }   from '@angular2-material/card'; 
import { MdListModule }   from '@angular2-material/list'; 
import { MdSidenavModule }  from '@angular2-material/sidenav'; 
import { MdToolbarModule }  from '@angular2-material/toolbar'; 
import { MdIconModule }   from '@angular2-material/icon'; 

@NgModule({ 
    declarations: [ 
    AppComponent      
    ], 
    imports: [ 
    BrowserModule, 
    CommonModule, 
    FormsModule, 
    HttpModule, 
    RouterModule,  
    routing, 
    DashboardModule, 
    MdCoreModule, 
    MdButtonModule, 
    MdCardModule, 
    MdListModule, 
    MdSidenavModule,  
    MdToolbarModule, 
    MdIconModule 
    ], 
    providers: [ 
    appRouterProviders 
    ], 
    entryComponents: [ AppComponent ], 
    bootstrap: [ AppComponent ] 
}) 
export class AppModule { 

} 

अगर मैं अपने उप मॉड्यूल वे प्रदर्शन नहीं करते में से एक में सामग्री तत्वों का उपयोग करने का प्रयास करें, इस उप मॉड्यूल कैसा दिखता है

import { NgModule }    from '@angular/core'; 
import { CommonModule }   from '@angular/common'; 
import { FormsModule }   from '@angular/forms'; 
import { dashboardRouting }  from './dashboard.routes'; 
import { DashboardComponent }  from './dashboard.component'; 
import { ActionsDialogComponent } from './actions-dialog'; 

@NgModule({ 
    imports: [ 
    CommonModule, 
    FormsModule, 
    dashboardRouting,  
    ], 
    declarations: [ 
    DashboardComponent, 
    ActionsDialogComponent  
    ], 
    providers: [  
    ] 
}) 
export class DashboardModule {} 

हालांकि अगर मैं उनके द्वारा प्रदर्शित किए गए सबमिशन में सामग्री मॉड्यूल आयात करता हूं।

import { NgModule }    from '@angular/core'; 
import { CommonModule }   from '@angular/common'; 
import { FormsModule }   from '@angular/forms'; 
import { dashboardRouting }  from './dashboard.routes'; 
import { DashboardComponent }  from './dashboard.component'; 
import { ActionsDialogComponent } from './actions-dialog'; 
import { MdCoreModule }   from '@angular2-material/core'; 
import { MdButtonModule }   from '@angular2-material/button'; 
import { MdCardModule }   from '@angular2-material/card'; 
import { MdListModule }   from '@angular2-material/list'; 
import { MdSidenavModule }  from '@angular2-material/sidenav'; 
import { MdToolbarModule }  from '@angular2-material/toolbar'; 
import { MdIconModule }   from '@angular2-material/icon'; 

@NgModule({ 
    imports: [ 
    CommonModule, 
    FormsModule, 
    dashboardRouting, 
    MdCoreModule, 
    MdButtonModule, 
    MdCardModule, 
    MdListModule, 
    MdSidenavModule,  
    MdToolbarModule, 
    MdIconModule, 
    ], 
    declarations: [ 
    DashboardComponent, 
    ActionsDialogComponent  
    ], 
    providers: [  
    ] 
}) 
export class DashboardModule {} 

क्यों सामग्री मॉड्यूल sublevel फिर यदि वे पहले से रूट स्तर पर आयात किए जाते हैं पर आयात किया जाना चाहिए: यह जब सामग्री डिजाइन घटकों काम submodule की तरह लग रहा है?

+2

आपके मॉड्यूल पुन: प्रयोज्य होना चाहिए। आपके मॉड्यूल का उपयोग करने वाले किसी भी व्यक्ति को अपने रूट मॉड्यूल में सभी प्रकार के मॉड्यूल आयात करने की आवश्यकता क्यों होगी? यह केवल आपके मॉड्यूल को फिर से उपयोग करने में कठोर बनाता है। –

+0

ओ प्रतीक्षा करें ... यह सच है। धन्यवाद। –

उत्तर

8

कोणीय 2 में अवयवों की अवधारणा में "रूट स्तर" जैसा कुछ भी नहीं है जिसका आप उल्लेख कर रहे हैं।
घटक जावा (या जो भी उच्च स्तरीय भाषा) प्रोजेक्ट में कक्षाओं की तरह मॉड्यूलर टुकड़े बहुत अधिक होते हैं - जहां आप उपयोग की जाने वाली प्रत्येक कक्षा को भी आयात करेंगे।
उन्हें एक दूसरे के अंदर घोंसला या इस्तेमाल किया जा सकता है, लेकिन फिर भी हर घटक को अपनी निर्भरताओं को आयात करने की आवश्यकता होती है।
कृपया ध्यान दें कि कोणीय 1 में बाहरी मॉड्यूल/लाइब्रेरी को शामिल करने से कोणीय 2 में आयात करना एक बहुत ही अलग दृष्टिकोण है (तब अनिवार्य रूप से प्रत्येक निर्भरता के लिए index.html में एक नया संदर्भ दे रहा है)।
कोणीय 2 में उन आयात पहले हैं, क्योंकि टाइपस्क्रिप्ट-कंपाइलर को यह पता होना चाहिए कि आपके घटक में क्या उपयोग किया जाता है (इस प्रकार त्रुटि जांच करने के लिए कुछ और शक्ति जोड़ना)
संकलित और पैक किए गए निर्माण में केवल एक बार निर्भरता शामिल होनी चाहिए (बशर्ते सब कुछ ठीक से कॉन्फ़िगर किया गया हो)।

40

कोणीय के दस्तावेज़ भ्रामक है, वे कई क्षेत्रों में आप रूट मॉड्यूल (app.module.ts) में आयात मॉड्यूल है कि विश्व स्तर पर राज्य कर रहे हैं उपलब्ध है, लेकिन जब तक आप अच्छी तरह से पढ़ें क्या जल्दी से स्पष्ट नहीं है (blah) है कि आप एक submodule इसका इस्तेमाल जब टूटता है कि विरासत और एक सबमिशन मॉड्यूल के लिए अपना स्वयं का ऐप डोमेन बनाता है (सेवाएं नहीं, सेवाएं अभी भी वैश्विक हैं, कम से कम जिस तरह से मैंने इसे पढ़ा है)। यही कारण है कि यदि आप मेरे जैसे थे, तो मैंने देखा कि कुछ सामान जो मुझे अपने उप-मॉड्यूल में आयात करना था, और अन्य जो मैंने वास्तव में मुझे भ्रमित नहीं किया था। Angular.io पर यह अनुभाग यहां चर्चा करता है जो इस पर चर्चा करता है: NgModule.html

कुछ और उल्लेख करने लायक है: मैंने एंगुलर 2 में विकास करना सोचा था क्योंकि आरसी 5 + का मतलब है कि मुझे अपनी सभी सुविधाओं को मॉड्यूल में लपेटने की ज़रूरत है, यह बस मामला नहीं है। मॉड्यूल हमारे लिए हमारे सामान्य दिन में एंगुलर 2 के साथ काम करने के लिए वास्तव में जरूरी नहीं है जबतक कि आप आलसी लोडिंग का उपयोग नहीं करना चाहते हैं या विशेष रूप से दूसरों के साथ कोड साझा करना चाहते हैं, उदाहरण के लिए एक एनपीएम पैकेज।

+0

"मैंने कुछ उप-मॉड्यूल में आयात करने के लिए मुझे कुछ आइटम देखा, और अन्य जो मैंने वास्तव में मुझे भ्रमित नहीं किया।" - इस के साथ मेरे दिमाग को लंबे समय तक तोड़ दिया। अच्छे खर्च। – ceebreenk

+0

दिमाग उड़ा puufffffff। यह कोणीय सामग्री मॉड्यूल का उपयोग करने की कोशिश करते हुए मुझे सिरदर्द बचाया। धन्यवाद! स्पष्टीकरण के लिए – Juan

+0

धन्यवाद। मैंने कई दिनों तक इस पर अटक गया है। वैश्विक स्तर से मॉड्यूल स्तर पर घोषणा करने के बाद यह काम करता था। –

संबंधित मुद्दे