angular - 如何围绕仅重命名组件选择器的 Angular 组件创建包装器?
问题描述
来自 React 背景,您可以通过重命名来抽象出应用程序中的库组件,如下所示:
const MyAppTable = (props) => <LibraryTable ...props />;
我想在 Angular 中做类似的事情,但不确定如何获得组件行为的 1:1 映射。例如,我想这样做:
<my-app-table [input]="input" ></my-app-table>
是相同的
<library-table [input]="input" ></library-table> (plus all additional behavior found in component)
解决方案
函数式编程不是很棒吗?
您必须使用 Angular 采用面向对象的方式。您可以扩展组件类并仅更新要更改的组件元数据。
@Component({selector: 'my-app-table'})
export class MyAppTableComponent extends LibraryTableComponent {
constructor() {
super()
}
}
您必须匹配基类的构造函数参数。否则 Angular 不知道依赖注入是什么。
这在面向对象编程中有点反模式。如果基类更新到新版本,除非您更新派生类,否则可能会破坏功能。
所以首选的方法称为封装。这基本上意味着环绕另一个组件,但这并不容易。
@Component({
selector: 'my-app-table',
template: `<library-table [input]="input"></library-table>`
})
export class MyAppTableComponent {
@Input() input: any;
}
以上需要更多的工作,但从代码的角度来看更安全。
推荐阅读
- jquery - 用 VueJS 替换 Jquery 模态调用
- node.js - Lint-staged 找不到匹配 glob 的暂存文件
- javascript - 离子自动启动插件问题。应用添加后显示空白页
- mitmproxy - 如何在 mitmproxy Web 界面 (mitmweb) 中关闭流程
- pandas - 将存储在数据框中的百分位值应用于数组
- javascript - Material-UI createShallow 检索用于酶单元测试的组件失败
- python - 如何使用漂亮的汤 4 去除文本格式标签?
- mongodb - 错误:子进程中发生异常:ChecksumMismatchError: SHA256 mismatch
- javascript - 当有函数不使用'yield'或'call'或'put'之类的效果时,如何测试sagas?
- c - 来自指针的函数中的指针:声明不兼容