服务
创建服务
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class TestService { }
使用:
export class AppComponent {
// 这里的 TestService 实际上就是获取示例对象的 Token(唯一标识)
constructor (private _test: TestService) {}
}
服务的作用域
使用服务可以轻松实现跨模块跨组件共享数据,这取决于服务的作用域。
在根注入器中注册服务,所有模块使用同一个服务实例对象。
import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class CarListService { }
在模块级别注册服务,该模块中的所有组件使用同一个服务实例对象。
新语法:
import { Injectable } from '@angular/core'; import { CarModule } from './car.module'; @Injectable({ providedIn: CarModule, }) export class CarListService { }
老语法:
import { CarListService } from './car-list.service'; @NgModule({ providers: [CarListService], }) export class CarModule { }
在组件级别注册服务,该组件及其子组件使用同一个服务实例对象。
import { Component } from '@angular/core'; import { CarListService } from '../car-list.service.ts' @Component({ selector: 'app-car-list', templateUrl: './car-list.component.html', providers: [CarListService] })
ℹ️
providedIn: 'root'
只是指明服务是全局单例的,这意味着整个应用中只有一个服务实例,通常用于跨多个组件和服务共享的场景。
但是,providedIn: 'root'
仍然可以在组件或模块的 providers
数组中重新提供该服务,这样它在该组件或模块中会有一个单独的实例,
其他地方仍然会使用全局单例实例。最后更新于