全网整合营销服务商

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

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

深入理解Angular4中的依赖注入

在Angular中使用依赖注入,可以帮助我们实现松耦合,可以说只有在组件中使用依赖注入才能真正的实现可重用的组件。
如果我们有个服务product.service.ts,其中export了一个ProductService类,类中有一个getProduct方法。

如果不使用依赖注入,假设我们需要在product组件中使用这个服务时就会new一个ProductService类,但如果这个组件被用到了另一个地方,需要的服务改变了,我们就不得不更改组件中的内容,这样的组件不能说是可复用的。

一、注入器

Angular中的注入器只有一种实现方法就是在构造函数中声明。

例如在一个组件中

constructor(productService: ProductService){}

通俗的讲这段代码的意思就是说,这个组件创建了一个productService,而这个productService是依赖ProductService的,这里的ProductService只是一个token,至于ProductService 是什么,是怎么实现的,全都是由提供器说明的。

二、提供器

通常提供器定义在应用级,及app.module.ts中,供所有组件或服务使用,当然也可以定义在某一个组件中,只供这一个组件使用。

我们以定义在应用级为例:

@NgModule({
  provides:[ProductService]
})

这段代码其实这一个简写,全写为:

@NgModule({
  provides:[{
    provide: ProductService,
    useClass:ProductService
  }]
})

这段代码中的provide声明的就是我们刚刚在注入器中提过的token,就是说这两个token是一一对应的,Angular会到提供器中找到和注入器相同的token.

代码中的useClass是实例化ProductService类,及我们帮助我们new 了一个类出来。除了useClass外,比较常用的还用useFactory,使用工厂模式实例化一个类。

这时候我们在组件中就可以直接使用ProductService类中的方法了。

当token和想要实例化的类名字相同时,我们就可以使用上面那种简写的方法。

说了这么多,那到底怎么才能体现出可复用性呢?

如果现在我们的product组件用到了另一个地方需要使用另一个服务,我们命名为AnotherProductService。有了依赖注入我们就不必要更改组件,而是更改app.module.ts中的提供器:

@NgModule({
  provide: ProductService,
  useClass: AnotherProductService
})

从这段代码可以看出,token并没有改变,可是这是实例化的类变为了AnotherProductService。

总结来说,当组件在构造函数中说明自己想要依赖一个类时,Angular首先会在这个组件自身找有没有提供器,如果没有就去这个组件的父组件中找,如果也没有找到就去应用级(app.module.ts)中找。找到后,就会按照提供器可说明的为组件注入它想要的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Angular4  # 依赖注入  # angular中的依赖注入  # angular中依赖注入  # 解决angularjs service中依赖注入$scope报错的问题  # 浅谈Angular6的服务和依赖注入  # 深入理解Angular中的依赖注入  # Angular 4依赖注入学习教程之InjectToken的使用(八)  # Angular 4依赖注入学习教程之Injectable装饰器(六)  # Angular基于Constructor Parameter的依赖注入方式详解  # 这段  # 这一  # 就去  # 中找  # 类中  # 复用  # 这是  # 器中  # 就会  # 有个  # 就不  # 说了  # 是由  # 可以说  # 是怎么  # 这么多  # 会在  # 这两个  # 如果没有  # 可以直接 


相关文章: html制作网站的步骤有哪些,iapp如何添加网页?  如何用PHP快速搭建CMS系统?  山东网站制作公司有哪些,山东大源集团官网?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  网站制作价目表怎么做,珍爱网婚介费用多少?  如何通过西部数码建站助手快速创建专业网站?  如何通过PHP快速构建高效问答网站功能?  广州商城建站系统开发成本与周期如何控制?  如何有效防御Web建站篡改攻击?  建站VPS选购需注意哪些关键参数?  C++中引用和指针有什么区别?(代码说明)  网站制作公司排行榜,四大门户网站排名?  如何通过FTP服务器快速搭建网站?  济南网站制作的价格,历城一职专官方网站?  定制建站如何定义?其核心优势是什么?  制作网站公司那家好,网络公司是做什么的?  深圳网站制作平台,深圳市做网站好的公司有哪些?  已有域名和空间如何快速搭建网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  Python多线程使用规范_线程安全解析【教程】  建站之星2.7模板:企业网站建设与h5定制设计专题  如何将凡科建站内容保存为本地文件?  建站之星多图banner生成与模板自定义指南  网站app免费制作软件,能免费看各大网站视频的手机app?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  建站之星安装路径如何正确选择及配置?  如何通过商城免费建站系统源码自定义网站主题?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  C#怎么创建控制台应用 C# Console App项目创建方法  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  高防服务器租用如何选择配置与防御等级?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何快速上传建站程序避免常见错误?  宝塔Windows建站如何避免显示默认IIS页面?  如何彻底卸载建站之星软件?  如何快速生成ASP一键建站模板并优化安全性?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何通过万网虚拟主机快速搭建网站?  如何选择建站程序?包含哪些必备功能与类型?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  建站主机类型有哪些?如何正确选型  如何高效配置香港服务器实现快速建站?  如何在橙子建站上传落地页?操作指南详解  如何选择高效可靠的多用户建站源码资源?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  深圳网站制作培训,深圳哪些招聘网站比较好?  c++怎么用jemalloc c++替换默认内存分配器【性能】  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  制作网站的基本流程,设计网站的软件是什么? 

您的项目需求

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