[英]Angular 2: Is it possible to inject a component to a service?
假設這是我的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注入到應用程序的服務中。 我該怎么做?
您cannot
做到這一點,我真的不明白您為什么要將Component注入服務。 應該是另一種方式。
如果您真的想使用組件1中的服務,則可以簡單地引用該服務並在內部使用它。
內部Component1.ts
import {Service1} from './services/Service1';
constructor(private myService: Service1) {
}
正如Sajeetharan所說,不,您不能那樣做,我不認為您實際上想將組件注入服務(但是您可以將一個或多個服務注入另一個服務)。
在您的示例中,可以在app.component視圖模板中使用<comp1>
和<comp2>
,而無需將comp1和comp2注入app.component, 這僅僅是因為在視圖模板上引用了組件並不意味着需要將其注入組件的視圖模板引用了它們。
為了在app.component視圖模板中引用組件,angular需要能夠編譯您的視圖模板並解析所有引用的組件。 它通過遍歷已注冊的模塊並查看模塊中定義的聲明和導出集合來實現。
因此,使用您當前的app.module定義:
...
declarations: [
AppComponent,
Comp1,
Comp2,
Comp3
],
...
AppComponent視圖模板應該可以在其視圖模板中使用Comp1,Comp2和/或Comp3,因為它們都在同一NgModule中聲明。 無需為組件定義更改任何代碼即可方便使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.