首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高级 Angular 组件模式 (3a)

高级 Angular 组件模式 (3a)

作者头像
littlelyon
发布2018-10-19 15:01:43
发布2018-10-19 15:01:43
7020
举报
文章被收录于专栏:狮乐园狮乐园

03-a Communicate Between Components Using Dependency Injection

原文: Communicate Between Components Using Dependency Injection

当前的<toggle>组件仍然存在其他的问题,比如:

  • 我们无法在其中方式多个<toggle-on>或者是<toggle-button>在同一个<toggle>
  • 如果一个<toggle-on>作为另外一个自定义组件的内容的话,我们无法是使用@ContentChild装饰器获取它

目标

我们需要将这两个问题作为新的目标:

  • 我们可以增加多个相同类型的子组件(<toggle-on><toggle-off><toggle-button>)
  • 并且可以使这些子组件放置在任意的自定义容器的视图模板(views)中

实现

针对第一个问题,我们使用@ContentChildren装饰器(因为它获取所有的子组件引用),但是它无法解决第二个问题。

为了同时解决这两个问题,我们可以使用Angular提供的DI机制(dependency injection mechanism)。你可以将一个组件的祖先组件通过DI机制注入到子组件的构造方法中,这样你就可以通过祖先组件的引用来访问它们的方法和属性。

所以,<toggle-on><toggle-off><toggle-button>都可以通过DI机制来获得最相近的<toggle>组件的引用,从而共享它的开关状态。

Note: 这里也可以使用service来共享状态,也许还会更便捷,但是我们可以通过DI来达到目的,我们可以在之后的章节(第十二章)来阐述service相关的内容,这部分内容会与React Context Provider的内容对应。

成果

你可以在在线代码仓库看到,有两个<toggle-off>组件如我们预期的那样被渲染,并且有一个<other-component>组件,其中有<toggle-off><toggle-on>两个组件。

这些子组件都会监听同一个<toggle>组件的开关状态。

译者注

依赖注入是Angular中提供的很强大的功能,在angularjs中就表现出色并作为卖点。

如果仔细思考的话,我们可以发现,在这一版的实现中,对于<toggle>组件的引用获取方式,从命令式转变为了声明式,因为我们不再关心获取<toggle>引用的细节(比如具体使用@ContentChild还是@ContentChildren)。

同时,依赖注入机制是依附于组件本身存在的,并不依附于模板的层级关系,因此不会面临问题二的困扰。

对于木偶组件本身,往往作为消费者存在,这种情况下使用DI机制可能会达到更好的效果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 03-a Communicate Between Components Using Dependency Injection
  • 目标
  • 实现
  • 成果
  • 译者注
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档