Angular依赖注入,angular组件复用

  Angular依赖注入,angular组件复用

  角度组件如何相互通信?什么是依赖注入?下面这篇文章带你简单了解一下组件通信的方法,并介绍依赖注入,希望对你有帮助!

  

1. 组件通讯

  1.1 向组件内部传递数据

  app-favorite[is favorite]= true /app-favorite//favorite . component . ts

  从“@angular/core”导入{ Input };

  导出类FavoriteComponent {

  @ Input()is favorite:boolean=false;

  }1.2 组件向外部传递数据

  要求:通过单击子组件中的按钮,将数据传递给父组件。

  !-子组件模板-

  button(click)= onclick() click/button//子组件类

  从“@angular/core”导入{ EventEmitter,Output }

  导出类FavoriteComponent {

  @ Output()change=new event emitter()

  onClick() {

  This.change.emit({ name:张三 })

  }

  }!-父组件模板-

  app-favorite(change)= onchange($ event)/app-favorite//父组件类

  导出类AppComponent {

  onChange(事件:{ name: string }) {

  console.log(事件)

  }

  }

2. 依赖注入

  2.1 概述

  依赖注入(DI)是面向对象程序设计中的一种设计原则,用于降低代码之间的耦合性。

  类别邮件服务{

  构造函数(APIKEY) {}

  }

  类EmailSender {

  邮件服务:邮件服务

  构造函数(){

  this.mailService=新邮件服务( APIKEY1234567890 )

  }

  sendMail(邮件){

  this.mailService.sendMail(邮件)

  }

  }

  const email sender=new email sender()

  EmailSender。sendmail(mail)EmailSender类与MailService类一起运行,后者依赖于MailService类,后者是Email Sender类的依赖项。

  上面写的耦合度太高,代码不健壮。如果MailService类改变了参数的传递方式,EmailSender类中的内容也会改变。

  类EmailSender {

  邮件服务:邮件服务

  构造函数(邮件服务:邮件服务){

  this . mail service=mail service;

  }

  }

  const mailService=新邮件服务( APIKEY1234567890 )

  const EmailSender=new Email Sender(mailservice)在实例化Email Sender类时,将其依赖项以构造函数参数的形式注入到类内部。这种写法就是依赖注入。

  依赖注入降低了代码之间的耦合度,增加了代码的可维护性。mail类中的代码更改将不再影响EmailSender类。

  2.2 DI 框架

  Angular有自己的DI框架,隐藏了实现依赖注入的过程。对于开发者来说,只需要简单的代码就可以使用复杂的依赖注入函数。

  Angular的DI框架中有四个核心概念:

  依赖:组件所依赖的实例对象,以及服务实例对象。

  Token:获取服务实例对象的ID。

  注入器:注入器,负责创建维护服务类的实例对象,将服务实例对象注入组件。

  提供者:配置注入器的对象,指定服务类以创建服务实例对象,并获取实例对象的标识。

  2.2.1 注入器 Injectors

  注入器负责创建服务类实例对象,并将服务类实例对象注入所需的组件。

  创建注射器

  从“@angular/core”导入{ ReflectiveInjector }

  //服务类别

  类别邮件服务{}

  //创建一个注入器并将其传递给服务类

  constin jector=reflective injector . resolved create([mail service]),以获取注入器中的服务类实例对象。

  constmailservice=injector . get(mailservice)服务实例对象是singleton模式,创建服务实例后,注入器会缓存服务实例。

  const mail service 1=injector . get(mail service)

  const mail service 2=injector . get(mail service)

  console . log(mail service 1==mail service 2)//true不同的注入器返回不同的服务实例对象。

  const injector=reflective injector . resolve andcreate([mail service])

  const child injector=injector . resolveandcreatechild([mail service])

  const mail service 1=injector . get(mail service)

  const mail service 2=child injector . get(mail service)

  console . log(mail service 1==mail service 2)//false服务实例的搜索类似于函数作用域链。如果可以找到当前级别,则使用当前级别;如果找不到当前级别,将在父级中搜索。

  常量注射器=反射注射器。解决并创建([邮件服务])

  const子注射器=注射器。resolveandcreatechild([])

  常量邮件服务1=注射器。获取(邮件服务)

  常量邮件服务2=子注入器。获取(邮件服务)

  控制台。log(邮件服务1===邮件服务2)//true2.2.2 提供者 Provider

  配置注入器的对象,指定了创建实例对象的服务类和访问服务实例对象的标识

  常量注射器=反射注射器。解决并创建([

  {提供:邮件服务,使用类别:邮件服务}

  ])访问依赖对象的标识也可以是字符串类型

  常量注射器=反射注射器。解决并创建([

  {提供:邮件,使用类别:邮件服务}

  ])

  const邮件服务=注射器。获取(邮件)使用值

  常量注射器=反射注射器。解决并创建([

  {

  提供:"配置",

  useValue: Object.freeze({

  API键:“API 1234567890”,

  API scret:“500-400-300”

  })

  }

  ])

  const Config=注射器。获取(配置)将实例对象和外部的引用建立了松耦合关系,外部通过标识获取实例对象,只要标识保持不变,内部代码怎么变都不会影响到外部

  更多编程相关知识,请访问:编程视频!以上就是带你了解有角的中的组件通讯和依赖注入的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: