2016-09-18 57 views
6

Angular2 tutorial中,通过将详细组件添加到@NgModule来引入详细组件。如何在Angular2中声明嵌套的组件

相反,我想通过以某种方式导入它的外部组件(AppComponent)添加它,以便只有外部组件引用内部组件。

我不知道该怎么做。旧示例涉及directives属性,但directives不再存在于类型ComponentMetadtaType中。所以这不起作用

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

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

回答

4

您必须添加指令和组件到模块的declarations: []
如果您只想让一个组件能够使用某个组件,请创建一个仅由这两个组件组成的模块。

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

也许你是对的,但你基本上说,我想要做的是不可能做以我想要的方式? –

+0

我解释了“以某种方式导入它”的样子。在Angular2 final中,您需要使用模块,并且这是使另一个组件知道一个组件,指令或管道的唯一方法。 –

+0

@KlasMellbourn这不完全是他在说什么。确实,你不能在另一个组件中声明一个组件。所以声明应该移到一个外部模块中,这个模块仍然可以,因为其他模块/组件不会知道这个外部模块,它与您的旧外部组件声明完全一样。 – tibbus

0

你应该声明声明元,如下图所示,

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

这不是他们想要做的事情。我想声明性地导入使用内部组件的外部组件中的内部组件。 '@ NgModule'声明没有说明什么在使用什么。但也许我想要的是不可能的。 –