全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Angular 4依赖注入学习教程之ClassProvider的使用(三)

学习目录

  • Angular 4 依赖注入教程之一 依赖注入简介
  • Angular 4 依赖注入教程之二 组件服务注入
  • Angular 4 依赖注入教程之三 ClassProvider的使用
  • Angular 4 依赖注入教程之四 FactoryProvider的使用
  • Angular 4 依赖注入教程之五 FactoryProvider配置依赖对象
  • Angular 4 依赖注入教程之六 Injectable 装饰器
  • Angular 4 依赖注入教程之七 ValueProvider的使用
  • Angular 4 依赖注入教程之八 InjectToken的使用

前言

本文属于Angular 4依赖注入学习系列文章的第三篇,主要给大家介绍了Angular 4依赖注入之ClassProvider使用的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

本系列教程的开发环境及开发语言:

  • Angular 4 +
  • Angular CLI
  • TypeScript

基础知识

Provider 的作用

在 Angular 中我们通过 Provider 来描述与 Token 相关联的依赖对象的创建方式。在 Angular 中依赖对象的创建方式分为以下四种:

  • useClass
  • useValue
  • useExisting
  • useFactory


(图一:注入器、Provider与依赖对象关系)

Provider 的分类

在 Angular 中 Provider 主要分为:

  • TypeProvider
  • ClassProvider
  • ValueProvider
  • ExistingProvider
  • FactoryProvider

ClassProvider

ClassProvider 接口定义

export interface ClassProvider {
 // 用于设置与依赖对象关联的Token值,Token值可能是Type、InjectionToken、
 // OpaqueToken的实例或字符串
 provide: any; 
 useClass: Type<any>;
 // 用于标识是否multiple providers,若是multiple类型,则返回与Token关联的依赖
 // 对象列表
 multi?: boolean; 
}

看完上面的接口定义,相信一些读者会觉得陌生。在本系列教程第二小节中,我们用到了 TypeProvider。

不信你往下看:

@NgModule({
 ...
 providers: [HeroService], // 方式一
 bootstrap: [AppComponent]
})
export class AppModule { }

// TypeProvider接口
export interface TypeProvider extends Type<any> {}

那跟 ClassProvider 有什么关系?先不急,请你继续往下看:

@NgModule({
 ...
 providers: [{
 provide: HeroService, useClass: HeroService // 方式二
 }],
 bootstrap: [AppComponent]
})
export class AppModule { }

是不是终于看到了 useClass 。其实上面两种方式是等价的,方式一更加简洁,方式二是采用标准的语法哈。那么问题来了,什么时候要使用 useClass 语法?回答这个问题前,我们先看个需求。

假设由于业务需要,先前我们定义的 HeroService 的数据,需要从服务器获取,而不是使用静态数据。项目采用前后端分离的开发方式进行开发,此外在项目开发前已经协商好数据格式,也给出了对应的模拟数据(测试数据)。

那么除了修改原有的 HeroService 服务外,有没有其它方式可以方便地验证一下模拟数据,同时保持较小的改动量哈。其实我们可以创建一个新的数据服务,如 MockHeroService ,具体实现如下:

创建 MockHeroService 服务

export class MockHeroService {
 heros: Array<{ id: number; name: string }> = [
 { id: 16, name: 'RubberMan' },
 { id: 17, name: 'Dynama' },
 { id: 18, name: 'Dr IQ' },
 { id: 19, name: 'Magma' },
 { id: 20, name: 'Tornado' }
 ];

 getHeros() {
 return this.heros;
 }
}

使用 MockHeroService 服务

@NgModule({
 ...
 providers: [{
 provide: HeroService, useClass: MockHeroService
 }],
 bootstrap: [AppComponent]
})
export class AppModule { }

更新完相关的代码,正常情况下,在 http://localhost:4200/ 页面,你将看到以下的内容:

ID: 16 - Name: RubberMan
ID: 17 - Name: Dynama
ID: 18 - Name: Dr IQ
ID: 19 - Name: Magma
ID: 20 - Name: Tornado

其实服务命名为 MockHeroService 的目的,也是为了说明依赖注入的好处,即易于进行本地单元测试。此外假设没有利用 Angular 依赖注入的特性,我们需要修改应用中每个应用到 HeroService 的地方。

我有话说

ClassProvider 接口中的 Type 类型是什么?

export interface Type<T> extends Function { new (...args: any[]): T; }

export function isType(v: any): v is Type<any> {
 return typeof v === 'function';
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# angular4  # 依赖注入  # angular依赖注入  # angularjs依赖注入  # Angular 4依赖注入学习教程之InjectToken的使用(八)  # Angular 4依赖注入学习教程之ValueProvider的使用(七)  # Angular 4依赖注入学习教程之Injectable装饰器(六)  # Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)  # Angular 4 依赖注入学习教程之FactoryProvider的使用(四)  # Angular 4依赖注入学习教程之组件服务注入(二)  # Angular 4依赖注入学习教程之简介(一)  # 深入理解Angular4中的依赖注入  # 往下看  # 来了  # 相关内容  # 出了  # 我有  # 什么时候  # 两种  # 这个问题  # 请你  # 我们可以  # 给大家  # 不信  # 看完  # 来看看  # 相关联  # 之二  # 这篇文章  # 你将  # 较小  # 四种 


相关文章: 唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  如何快速生成凡客建站的专业级图册?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  专业商城网站制作公司有哪些,pi商城官网是哪个?  已有域名和空间,如何快速搭建网站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  建站之星代理如何优化在线客服效率?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  Python路径拼接规范_跨平台处理说明【指导】  电商网站制作公司有哪些,1688网是什么意思?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  香港服务器租用费用高吗?如何避免常见误区?  网页设计与网站制作内容,怎样注册网站?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在宝塔面板中创建新站点?  c# await 一个已经完成的Task会发生什么  做企业网站制作流程,企业网站制作基本流程有哪些?  如何注册花生壳免费域名并搭建个人网站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  C++如何使用std::optional?(处理可选值)  如何高效利用亚马逊云主机搭建企业网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  PHP 500报错的快速解决方法  c++怎么用jemalloc c++替换默认内存分配器【性能】  建站之星安装步骤有哪些常见问题?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  北京网站制作的公司有哪些,北京白云观官方网站?  建站ABC备案流程中有哪些关键注意事项?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  网站设计制作企业有哪些,抖音官网主页怎么设置?  网站微信制作软件,如何制作微信链接?  ,怎么用自己头像做动态表情包?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  Android滚轮选择时间控件使用详解  盐城做公司网站,江苏电子版退休证办理流程?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  营销式网站制作方案,销售哪个网站招聘效果最好?  如何制作网站标识牌,动态网站如何制作(教程)?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何通过VPS建站无需域名直接访问?  网站制作新手教程,新手建设一个网站需要注意些什么?  大连 网站制作,大连天途有线官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。