用Angular注入组件

时间:2018-08-15 21:56:20

标签: angular

在我的有角度的应用程序中,我在根元素中始终有一个组件。例如:

<foo></foo>

此组件具有“显示”方法,可用于显示该组件。我希望能够从项目的任何组件中获得对该组件的引用,以便能够从任何地方显示“ foo”组件。我知道我可以使用服务来做到这一点,但是我更希望能够将对该组件的引用注入其他组件。像这样:

export class MyComponent {
   constructor(private _foo: FooComponent) {}
}

是否可以用Angular做类似的事情?

1 个答案:

答案 0 :(得分:4)

不,您不能像服务一样注入组件。组件不可注射。

您可以使用@ViewChild获得对该组件的引用。但只能来自包含该组件的任何组件。

更新:

如果您需要为组件设置一些设置信息,而它不是子组件(带有选择器的子组件嵌套在父组件中),那么您的下一个最佳选择就是服务。

>

您可以构建服务并将其注入到两个组件中。在一个组件中,您可以设置任何初始化和设置值。在另一个组件中,您可以在设置组件时读取这些值。

如果只需要隐藏或显示组件,则可以考虑的另一种选择是拥有两个不同的组件,一个带有<foo></foo>,另一个没有<foo>。然后,您可以将其他组件路由到包含<foo>或不包含<foo>的页面,而不用打开和关闭它。

这是我的意思的图片。在我的情况下,<foo>是我的菜单组件。

enter image description here

我的应用程序组件的路由器出口是整个页面。我在那里路由不需要的菜单(例如登录页面)。

我的外壳组件具有菜单和路由器出口。我在那里路由任何我想显示菜单的地方。