Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将子组件的@input和@output隐式地公开给Angular中的祖父母?_Javascript_Angular_Inheritance_Angular Material - Fatal编程技术网

Javascript 如何将子组件的@input和@output隐式地公开给Angular中的祖父母?

Javascript 如何将子组件的@input和@output隐式地公开给Angular中的祖父母?,javascript,angular,inheritance,angular-material,Javascript,Angular,Inheritance,Angular Material,概述: 我只是想了解处理这种情况的正确方法。说我想 使用现有组件(如mat select)创建组件(如水果选择元素)的自定义版本。现在假设现有组件公开了一堆@input和@output,我的组件不会将它们重新公开给它自己的消费者 如果现在有一些应用程序想要使用我的自定义组件,但也想要使用底部组件的@inputs/@outputs呢 以下是我试图表达的一个例子: 在本例中,假设我创建了一个由MatSelect+围绕它的一些自定义行为组成的水果选择组件。但是对于这个例子,我故意不公开MatSelec

概述:

我只是想了解处理这种情况的正确方法。说我想 使用现有组件(如mat select)创建组件(如水果选择元素)的自定义版本。现在假设现有组件公开了一堆@input和@output,我的组件不会将它们重新公开给它自己的消费者

如果现在有一些应用程序想要使用我的自定义组件,但也想要使用底部组件的@inputs/@outputs呢

以下是我试图表达的一个例子:

在本例中,假设我创建了一个由MatSelect+围绕它的一些自定义行为组成的水果选择组件。但是对于这个例子,我故意不公开MatSelect公开的占位符@Input

一个想在视图中使用“水果选择”的应用程序如何指定占位符

我可以想出的选择:

通过MatSelect类,手动重新暴露所有@输入和@输出。对于@Outputs,我必须编写只将事件传播出去的包装器方法。 让我的水果选择扩展MatSelect,这样它就可以隐式地访问它的super的交互程序。虽然这似乎是我想到的第一个解决方案,但不确定它是否容易实现。谷歌搜索并没有显示很多人在这样做,所以不确定。
所以,据我所知,你有两个选择,你描述。根据我的经验,我可以说,我只见过一次使用组件继承,它有很多缺点-它带来了另一个巨大的复杂性级别,它不继承模板,并检查您将从中继承到您的子组件~30个公共字段中的内容

所以在继承的情况下,您将得到一个组件,该组件内部有许多无意义的字段,您仍然需要将所有输出绑定到继承的事件触发器,因为模板没有被继承

另一方面,到目前为止,您只需要占位符输入,所以您可以重新公开它。这对您的组件也有意义,但并非所有MatSelect字段都有意义,因此您可以选择要重新公开的字段


说到我的观点,我当然更喜欢第二种选择——重新曝光。希望有帮助

你最后在这里干什么?我来自React,试图学习角度。在React中,这将是一个简单且正常的方法,但如何在角度上解决这个问题?我们不应该在新组件中包装组件吗?`在新组件中包装组件'-基本上: