您是否在課程中學習過「角模塊」模塊?我在這裏覆蓋:
任何添加到providers數組的服務提供者都在應用程序的 根目錄中註冊。因此,該服務可用於在應用程序中將 注入任何類。
而且這個例子:
說,例如,我們有一個名爲ProductModule一個功能模塊。我們將ProductService添加 到本模塊的providers數組中。起初,我們可能會認爲我們已經將ProductService封裝爲 的ProductModule。但事實並非如此。添加到提供者陣列的任何服務提供商 已在 應用程序的根目錄中註冊,並且可用於任何類,即使在其他 功能模塊中也可提供。
上述內容是否也涵蓋了您的方案?
然後將此:
爲「服務和依賴注入」課程模塊中討論, 應該只有這是一個 應用範圍的單服務的一個實例。因此,任何應該共享的模塊都不應該包含在 提供程序數組中。 相反,考慮爲服務構建一個Core模塊,並在AppModule中將其導入 。這將有助於確保只有一次登記的服務是 。
讓我知道如果這沒有幫助,我會在我的課程的下一次更新中進一步澄清這一點。
下面是一個例子核心模塊:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DataService } from './data.service';
import { MessageService } from './message.service';
@NgModule({
imports: [
CommonModule
],
declarations: [],
providers: [
DataService,
MessageService
]
})
export class CoreModule { }
我登記我的DataService
和MessageService
這裏。
然後拉動核心模塊是這樣的:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
import { WelcomeComponent } from './home/welcome.component';
import { PageNotFoundComponent } from './home/page-not-found.component';
import { AppRoutingModule } from './app-routing.module';
/* Feature Modules */
import { UserModule } from './user/user.module';
import { MessageModule } from './messages/message.module';
import { CoreModule } from './core/core.module';
@NgModule({
declarations: [
AppComponent,
WelcomeComponent,
PageNotFoundComponent
],
imports: [
BrowserModule,
HttpClientModule,
UserModule,
MessageModule,
AppRoutingModule,
CoreModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
現在在CoreModule註冊的服務提供給每組件,服務或其他在整個應用程序類。
你使用的服務是這樣的:
import { Component, OnInit } from '@angular/core';
import { MessageService } from '../core/message.service';
@Component({
selector: 'pm-menu',
templateUrl: './menu.component.html'
})
export class MenuComponent implements OnInit {
get displayMessages(): boolean {
return this.messageService.displayMessages;
}
constructor(private messageService: MessageService) { }
// ...
}
要在您需要添加一個import語句爲那件事代碼文件中使用任何。所以你仍然需要添加一個導入語句你的服務,然後才能在任何需要它們的組件/類/管道/服務等中使用它們。
你使用模塊的延遲加載還是全部急切加載 ? –
我寧願懶惰地加載它們,但我的大腦如此油炸以至於我並不在乎。 –