【发布时间】:2019-01-30 19:55:22
【问题描述】:
概述:
我只是想了解处理这种情况的正确方法。说我想
使用现有组件(例如mat-select)创建组件的自定义版本(例如水果选择元素)。现在假设现有组件公开了一堆@inputs 和@outputs,我的组件不会“重新公开”给它自己的消费者。
如果现在有应用想要使用我的自定义组件但又想使用“底部”组件的@inputs/@outputs 怎么办?
这是我试图传达的一个例子:
在此示例中,假设我创建了由 MatSelect + some custom behavior around it 组成的 FruitSelect 组件。但是对于这个例子,我故意不暴露MatSelect暴露的placeholder@Input。
想要在其视图中使用FruitSelect 的应用如何指定placeholder?
我能想到的选项:
- 通过
MatSelect类并手动重新公开所有@Inputs和@Outputs。对于@Outputs,我将不得不编写仅将事件传播出去的包装器方法。 - 让我的
FruitSelect扩展MatSelect,因此它可以隐式访问它的super的交互器。虽然这似乎是设计明智的第一个想到的解决方案,但不确定它是否容易实现。谷歌搜索没有显示很多人这样做,所以不确定。
【问题讨论】:
-
你在这里做了什么?我来自 React,正在尝试学习 Angular。在 React 中,这将是一种简单且正常的方法,但是在 Angular 中如何解决这个问题?我们不应该将组件包装在新组件中吗?
-
` 将组件包装在新组件中` - 差不多 :(
标签: javascript angular inheritance angular-material