2016-09-18 12 views
6

W składniku szczegółowym wchodzi Angular2 tutorial, dodając go do @NgModule.Sposób deklarowania komponentów zagnieżdżonych w Angular2

Zamiast tego, chciałbym dodać go przez zewnętrzny komponent (AppComponent) w jakiś sposób importując go, tak że tylko zewnętrzny komponent odnosi się do wewnętrznego komponentu.

Nie mogę wymyślić, jak to zrobić. Stare przykłady odnoszą się do właściwości directives, ale directives nie istnieją już w typie ComponentMetadtaType. Więc to nie działa

import { HeroDetailComponent } from './hero-detail.component'; 

@Component({ 
    selector: 'my-app', 
    [..] 
    directives: [HeroDetailComponent] 
}) 

Odpowiedz

4

trzeba dodać dyrektyw i komponenty do declarations: [] modułu.
Jeśli chcesz, aby tylko jeden komponent mógł korzystać z komponentu, utwórz moduł składający się tylko z tych dwóch komponentów.

@NgModule({ 
    imports: [BrowserModule], 
    declarations: [AppComponent, FooComponent, BarDirective], 
    ... 
}) 
+0

Być może masz rację, ale jesteś w zasadzie powiedzieć, że to, co chcę zrobić, nie jest możliwe do zrobienia w taki sposób, w jaki chcę? –

+0

Wyjaśniłem, jak może wyglądać "jakoś zaimportować". W Angular2 final wymagane jest użycie modułów i jest to jedyny sposób na stworzenie jednego komponentu, dyrektywy lub rury znanej z innego komponentu. –

+0

@KlasMellbourn To nie jest dokładnie to, co on mówi. To prawda, że ​​nie można zadeklarować komponentu w innym komponencie. Tak więc deklaracja powinna zostać przeniesiona do zewnętrznego modułu, który nadal będzie w porządku, ponieważ inne moduły/komponenty nie będą wiedzieć o tym zewnętrznym module, dokładnie tak, jak poprzednia zewnętrzna deklaracja składowa. – tibbus

0

Należy zadeklarować go deklaracji metadanych jak pokazano poniżej,

import { HeroDetailComponent } from './hero-detail.component'; 
@NgModule({ 
    imports:  [ BrowserModule ], 
    declarations: [ AppComponent,HeroDetailComponent], //<----here 
    providers: [], 
    bootstrap: [ AppComponent ] 
}) 
+2

To nie jest sposób, w jaki chcę to zrobić. Chciałbym deklaratywnie zaimportować komponent wewnętrzny w komponencie zewnętrznym, który używa komponentu wewnętrznego. Deklaracja "@ NgModule" nie wyjaśnia, co się używa. Ale może to, czego chcę, jest niemożliwe. –