2016-12-14 2 views
4

Я новичок в A2, поэтому этот вопрос, вероятно, был задан раньше, но я использую неправильную терминологию, поэтому не могу найти ответ.Angular2 - компонентная инъекция вне NgModule

Однако, я пытаюсь понять впрыск @Component внутри A2. Как лучше я не могу сказать, все компоненты, независимо от того, как вложенные они всегда должны быть объявлены как часть NgModules файл на корневом уровне (т.е. услуги объявлены здесь доступны через все компоненты)

@NgModule({ 
    imports: [ 
     ... 
    ], 
    declarations: [ 
     1stComponent, 
     2ndComponent, 
     3rdComponent, 
     4thComponent  <-- All components must be included here 
    ], 
    providers: [ 
     ... 
    ], 
    bootstrap: [ 
     AppComponent 
    ] 
}) 

Для меня, это кажется немного странным. Что делать, если у вас есть ChildComponent, который отображается только как часть ParentComponent? Почему необходимо указать ChildComponent на уровне NgModule? Может ли это ChildComponent не быть объявлено как часть родительского компонента, когда это необходимо? При объявлении всех компонентов спереди не возникает накладных расходов при загрузке приложения - ему нужно все встать перед собой? Или это только то, что NgModule определяет, какие компоненты предназначены для сборки, а не когда и как они отображаются во время выполнения?

ответ

1

В более ранних версиях Angular он работал так, как вы ожидали его (каждый компонент определил собственные зависимости). Примерно в то время, когда RC был выпущен, команда A2 решила его изменить.

Как упоминалось в Estus, вы можете использовать Lazy loading. Есть хорошее справочное руководство here, в котором показано, как это сделать. (прокрутите вниз до 'Lazy Loading the Home module').

В основном команда Angular решила разрешить вам сегментировать приложение в разных модулях, в соответствии с чем все составляющие & директивы зависят от уровня модуля. Если вы действительно беспокоитесь о том, что начальная нагрузка слишком много, сломайте вещи в разные модули.

Также, отвечая на ваш вопрос, да, определяя ваши компоненты в массиве объявлений в app.module.ts, вы затем будете загружать их. (Поскольку вы должны импортировать их в файл, чтобы ссылаться на них в первую очередь).

Смежные вопросы