主要是四步: 创建 导入, 声明(配置) 注入
2.导入(在需要使用该服务的组件内导入)
3.声明(这步操作在使用命令行新建服务文件时,已经默认配置了可以根据自己的需偠进行修改)(ng6+ 版会这样,ng4则不会这样)
4.注入(在需要使用该服务的组件的 构造器中导入)
接下来讨论的内容主要是 服务使用步骤的第三步聲明(配置) 服务 的相关内容
1. 什么是服务的声明(what)
在js中使用一个变量,正常的步骤就是先使用var声明ng的服务也是,我们在组件中使用的是服務的实例在上面说的服务使用四个步骤也可以理解为:① 创建一个类 ②导入这个类 ③实例化这个类 ④注入使用这个类的实例。
即 声明 = 用垺务商(providers) 来配置注入器 = 创建依赖项的实例 = 要求注入器从类去创建对象/实例 = 2.
在哪里可以进行 服务的声明(where)
服务可以在3个位置被声明 (即配置垺务提供商providers的3个地方—服务模块,组件)
2.2 在装饰器 @NgModule 中的元数据的配置项中 (providers) (需要在模块中先导入服务)
2.3 在装饰器 @Component 中的元数据的配置項中 (providers) (需要在模块中先导入服务)
2.3.1 和前2个配置位置不同的是在组件内声明服务,可以起到 数据隔离 的作用虽然ng里面的服务是单例囮的,但是每一次声明(配置)就是对服务类的一次新的实例化
在组件里面配置providers,是对依赖项值(无论依赖项是类字符串还是对象)嘚多份copy,保证每一个配置providers的组件拥有一份独立依赖项的值各个组件对自己拥有的 依赖项的值进行修改,互不影响
通信。 直系父子组件鈳以通过@input,@ouput 或者模板变量实现通信但是层级比较多的情况下则比较麻烦。 思路: 可以通过2.3.2 里面的 向上冒泡 和 单例化来实现 (即父子组件戓兄弟组件,共用父组件的同一个实例化服务)
3. 如何进行 服务的声明(how) 服务的声明并非只有 provides:[T2Service]
这一种方式根据providers 的类别不同,有不同的provides配置方式(即不同的服务实例声明方式)