javascript - 如何在Angular中将子组件的@inputs和@outputs隐式暴露给祖父母?
问题描述
概述:
我只是想了解处理这种情况的正确方法。假设我想
使用现有组件(例如 )创建组件的自定义版本(例如水果选择元素mat-select
)。现在说现有组件公开了一堆,@inputs
而@outputs
我的组件不会“重新公开”给它自己的消费者。
如果现在有应用程序想要使用我的自定义组件但也想要使用“底部”组件@inputs/@outputs
怎么办?
这是我试图传达的一个例子:
在此示例中,假设我创建了由+FruitSelect
组成的组件。但是对于这个例子,我故意不暴露暴露的.MatSelect
some custom behavior around it
placeholder
@Input
MatSelect
想要FruitSelect
在他们的视图中使用的应用程序如何指定一个placeholder
?
我能想到的选项:
- 通过
MatSelect
课程并手动重新曝光所有@Inputs
和@Outputs
. 对于@Outputs
我将不得不编写仅将事件传播出去的包装器方法。 - 使我的
FruitSelect
extendMatSelect
,因此它隐式地可以访问它的super
交互器。虽然这似乎是设计明智的第一个想到的解决方案,但不确定它是否容易实现。谷歌搜索没有显示很多人这样做,所以不确定。
解决方案
所以,据我所知,您有 2 个您描述的选项。根据我的经验,我可以说我只使用过一次组件继承,它有很多缺点 - 它带来了另一个级别的复杂性(巨大),它不继承模板,并检查你将从MatSelect继承的内容您的子组件(约 30 个公共字段)。
所以在继承的情况下,你最终会得到一个内部有很多无意义字段的组件+你仍然需要将所有输出绑定到继承的事件触发器(再次因为模板没有被继承)。
另一方面,到目前为止,您只需要占位符输入,因此您可以重新公开它。它对您的组件也有意义,但并非所有MatSelect字段都对FruitSelect 有意义,因此您可以选择要重新公开的字段。
说到我的观点,我肯定更喜欢第二种选择(重新曝光)。希望有帮助。
推荐阅读
- r - 将数据点与 ggplot2 相关联
- android - Android Kotlin - 处理多个客户端的套接字服务器
- python - 错误:3D Matlab 数组到 0 维 np 数组
- php - 尝试通过 ActiveCampain API (Laravel) 添加联系人
- php - laravel 中的 PDO 在返回后不会进入下一个循环
- python - Python 到 VB.NET - 使用 Tor 检查 URL
- laravel - Lighthouse 根据其他属性值更改字段值
- powerapps - 从填充了来自共享点的项目的组合框中提取数据
- python - 如何将 django 模型保存到数据库?save() 方法不起作用
- haskell - 使用“Haskell Tool Stack”在哪里准确设置要导入的模块的依赖项?