Angular 角度2:是否可以将组件注入服务?

Angular 角度2:是否可以将组件注入服务?,angular,Angular,假设这是我的app.module.ts文件: @NgModule({ declarations: [ AppComponent, Comp1, Comp2, Comp3 ], imports: [ BrowserModule, FormsModule, HttpModule ], providers: [Service], bootstrap: [AppComponent] }) export class AppM

假设这是我的app.module.ts文件:

 @NgModule({
  declarations: [
    AppComponent,
    Comp1,
    Comp2,
    Comp3
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [Service],
  bootstrap: [AppComponent]
})
export class AppModule { }
也可以说AppComponent的模板是:

<comp1></comp1>
<comp2></comp2>


如您所见,我有一个主要组件,AppComponent。它包含两个子组件Comp1和Comp2,我想将Comp1注入应用程序的服务。我该怎么做呢?

不能这样做,我真的不明白您为什么要将组件注入到服务中。应该是另一种方式

如果您真的想使用组件1中的服务,您可以简单地引用该服务并在内部使用它

内部组件1.ts

import {Service1} from './services/Service1';   

 constructor(private myService: Service1) {
 }

正如Sajeetharan所说,不,你不能这样做,我认为你不想将一个组件注入到一个服务中(你可以将一个或多个服务注入到另一个服务中)

在您的示例中,
可以在app.component视图模板中使用,而无需将comp1和comp2注入app.component,仅仅因为组件在视图模板上引用,并不意味着需要将它们注入引用它们的视图模板的组件中。

为了引用app.component视图模板中的组件,angular需要能够编译视图模板并解析所有引用的组件。它通过遍历已注册的模块并查看模块中定义的声明和导出集合来实现这一点

因此,您当前的app.module定义为:

...
  declarations: [
    AppComponent,
    Comp1,
    Comp2,
    Comp3
  ],
...

AppComponent视图模板可以在其视图模板中使用Comp1、Comp2和/或Comp3,因为它们都在同一个模块中声明。无需对组件定义进行任何代码更改即可方便此类使用。

我假设您希望动态向页面添加组件。那么,读一读它可能会对你有所帮助。若您想从服务控制组件状态,那个么您应该向服务添加可观察属性。更改状态的组件->侦听该属性。另一个服务/组件将值设置为该属性。也就是说,服务就像一个代理。