组合与继承
对于共享行为,优先使用组合
组合与继承 是 CoddyKit 上的免费 Angular Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Angular Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Angular Academy 课程共包含 4 节课。
两种复用策略
要在组件之间共享行为,可以使用继承(扩展基类),也可以使用组合(组合更小的部分)。Angular 的组合 API 使组合成为首选方案。
继承回顾
使用继承时,组件会扩展一个基础组件或指令,并复用它的输入、输出和逻辑。
export class FancyButton extends BaseButton {
// inherits BaseButton members
}继承的局限
一个类只能扩展一个基类。层次过深会变得僵化,而且您会继承全部内容,包括不需要的部分。
菱形问题
如果通过继承组合多种行为,就必须使用复杂而不自然的继承链。组合则通过独立应用多个指令避开了这一问题。
组合回顾
使用组合时,组件可以保持专注,并通过 hostDirectives 引入所需行为,按需混合任意数量的行为。
hostDirectives: [ElevateDirective, RippleDirective, FocusTrapDirective]优先使用组合
“优先使用组合而不是继承”这一指导原则在 Angular 中尤其适用:组合灵活、可叠加,还能避免脆弱的基类。
继承仍然适用的场景
如果多个紧密相关的变体共享一个稳定的基类,继承也很合适,例如由不同变体专门化一个基础表单字段。请保持继承层次浅。
混合使用两者
您可以结合使用这两种方式:通过扩展精简的基类共享结构,同时组合行为来处理横切关注点。
封装
组合会将每个行为的内部实现保持私有,只公开选定的输入和输出;而继承会公开整个基类 API。
向组合方式重构
当基类逐渐积累起彼此无关的职责时,请将每项职责拆分为一个指令并进行组合。这样得到的结果更加模块化,也更易于测试。
决策指南
需要多个相互独立的行为吗?使用组合。需要单一的共享结构基础吗?可以使用浅层基类。为了保持灵活性,默认优先使用组合。
快速检查
测试您对组合与继承的理解。
回顾
您了解到,组合(通过 hostDirectives 组合职责集中的行为)比继承(使用单一基类)更加灵活,能够避免脆弱的继承层次,因此应作为默认方案;继承则仅应在需要共享结构时以浅层形式使用。
常见问题解答
「组合与继承」课时是免费的吗?
是的 — 「组合与继承」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Angular Academy 课程的其余内容,请升级到 CoddyKit PRO。 Angular Academy 课程共包含 4 节课。
「组合与继承」这节课中我会学到什么?
对于共享行为,优先使用组合 你通过在浏览器中直接运行的动手代码来练习 Angular Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Angular Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Angular Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「组合与继承」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Angular Academy 课中编写并运行代码吗?
能。每节 Angular Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。