一:新建服務模塊和服務文件
ng g module services --spec=false ng g service services/quote --spec=false
二:在quote.service.ts中,可以用快捷方式新建初始服務。
ng-service
三:在services.module.ts中設置全局服務。
解釋:
forRoot()的目的是在應用程序中使用單例服務。
forRoot()的意義是僅有一個由ModuleWithProviders導出的service實例。
如果沒有forRoot()方法,如果你在模塊的providers里面添加一個service並在多處用到這個module,那么你在這個應用的不同級都會實例化這個service。用forRoot(),它會創建這個service的新實例
import { NgModule, ModuleWithProviders } from '@angular/core'; import { QuoteService } from './quote.service'; @NgModule() export class ServicesModule { static forRoot():ModuleWithProviders{ return { ngModule:ServicesModule, providers:[QuoteService] } } }
四:在項目核心模塊中引入服務模塊。core/core.module.ts
ServicesModule.forRoot()
import { NgModule, Optional, SkipSelf } from '@angular/core'; import { HeaderComponent } from './header/header.component'; import { FooterComponent } from './footer/footer.component'; import { SidebarComponent } from './sidebar/sidebar.component'; import { SharedModule } from '../shared/shared.module'; import { MatIconRegistry } from '@angular/material'; import { DomSanitizer } from '@angular/platform-browser'; import { loadSvgsources } from '../util/util.svg'; import { AppRoutingModule } from '../app.route.module'; import { ServicesModule } from '../services/services.module'; @NgModule({ imports: [ SharedModule, AppRoutingModule, ServicesModule.forRoot() ], exports:[ SharedModule, HeaderComponent, FooterComponent, SidebarComponent ], declarations: [HeaderComponent, FooterComponent, SidebarComponent] }) export class CoreModule { constructor( @Optional() @SkipSelf() parent:CoreModule, ir:MatIconRegistry, ds:DomSanitizer ){ if(parent){ throw new Error('模塊以及存在,不能再次加載'); } loadSvgsources(ir,ds); } }