说明
angular 把数据与业务进行了抽离,希望我们能够单一的专注于数据的处理和数据的展示。所以就建立了服务的概念。这里的服务不是后台中的服务,本质是函数的封装。封装很多方法,对数据进行处理和返回。
官方文档
服务的说明
1.服务是一个广义的概念,它包括应用所需的任何值、函数或特性。狭义的服务是一个明确定义了用途的类。它应该做一些具体的事,并做好。
2.Angular 把组件和服务区分开,以提高模块性和复用性。 通过把组件中和视图有关的功能与其它类型的处理分离开,你可以让组件类更加精简、高效。
3.理想情况下,组件的工作只管用户体验,而不用顾及其它。 它应该提供用于数据绑定的属性和方法,以便作为视图(由模板渲染)和应用逻辑(通常包含一些模型的概念)的中介者。
4.组件应该把诸如从服务器获取数据、验证用户输入或直接往控制台中写日志等工作委托给各种服务。通过把各种处理任务定义到可注入的服务类中,你可以让它被任何组件使用。 通过在不同的环境中注入同一种服务的不同提供者,你还可以让你的应用更具适应性。
5.Angular 不会强迫你遵循这些原则。Angular 只会通过依赖注入来帮你更容易地将应用逻辑分解为服务,并让这些服务可用于各个组件中。
依赖注入说明
1 DI 被融入 Angular 框架中,用于在任何地方给新建的组件提供服务或所需的其它东西。 组件是服务的消费者,也就是说,你可以把一个服务注入到组件中,让组件类得以访问该服务类。
2 在 Angular 中,要把一个类定义为服务,就要用 @Injectable() 装饰器来提供元数据,以便让 Angular 可以把它作为依赖注入到组件中。 同样,也要使用 @Injectable() 装饰器来表明一个组件或其它类(比如另一个服务、管道或 NgModule)拥有一个依赖。
3 注入器是主要的机制。Angular 会在启动过程中为你创建全应用级注入器以及所需的其它注入器。你不用自己创建注入器。
4 该注入器会创建依赖、维护一个容器来管理这些依赖,并尽可能复用它们。
提供者是一个对象,用来告诉注入器应该如何获取或创建依赖。
5 你的应用中所需的任何依赖,都必须使用该应用的注入器来注册一个提供者,以便注入器可以使用这个提供者来创建新实例。 对于服务,该提供者通常就是服务类本身。
个人理解
服务,是专门用来处理数据业务的。需要和依赖注入共同使用(依赖注入是后台概念)。那么我们在写业务的时候,可以按照接口创建服务列表,然后视图按照模块划分,注入数据展示即可。
命令
ng g s xxx
服务示例
import { Injectable } from '@angular/core';
//Injectable装饰器
@Injectable({
//作用域设定,'root'表示默认注入到AppModule中去,也就是根模块
//null 表示不设定区域,在哪里用就在哪里注入
//也可以是某个模块名字(这一般就是懒加载模式了)
providedIn: 'root'
})
export class TestService {
constructor() { }
}
注意:
1 需要手动在appmodule里注册
例子讲解
1 使用ng g s test建立服务示例
2 在根模块里引入
3 写点数据在服务里
4 使用
OK,这就是angular 服务的理解