angular - 是否有语法糖用于将子元素作为模板传递给角度组件(2+)
问题描述
我目前正在寻找一种在将模板传递给角度组件时减少噪音的方法。
考虑以下代码:
<parent>
<ng-template #child1><div>Test</div></ng-template>
<ng-template #child2><div>Test</div></ng-template>
</parent>
是否可以创建一个或多或少可以像这样使用的结构指令?
<parent>
<div *asTemplate="#child1">Test</div>
<div *asTemplate="#child2">Test</div>
</parent>
以便
<div *asTemplate="#child1">Test</div>
脱糖
<ng-template #child1><div>Test</div></ng-template>
直接使用
<div *asTemplate #child1>Test</div>
不起作用,因为 ref "child1" 引用了 div 而不是模板。
多谢!
解决方案
最简单的做法是将模板作为输入绑定传递。它允许您定义多个输入,并且不需要组件内部的任何复杂内容来呈现它们。
<parent [itemA]="childA" [itemB]="childB"></parent>
<ng-template #childA>Test A</ng-template>
<ng-template #childB>Test B</ng-template>
模板在结构上独立于 HTML。您需要<ng-template>
在 Html 元素内定位的唯一原因是访问作用域模板变量。否则,将<ng-tempalte>
.
是否可以创建一个或多或少可以像这样使用的结构指令?
您可以使用结构指令将模板引用转发到使用依赖注入器的父组件。您将注入父级,然后在父级上调用一个方法来转发引用。
<parent>
<div *child></div>
</parent>
子指令将使用函数回调将模板引用传递给父级(即setChildTemplate
)
@Directive({selector: '[child]'})
export class ChildDirective implements OnDestroy {
constructor(tempRef: TemplateRef<any>,
private parent: ParentComponent) {
this.parent.setChildTemplate(tempRef);
}
ngOnDestroy() {
this.parent.setChildTemplate(null);
}
}
推荐阅读
- angular - 如何在组件中使用 bypassSecurityTrustHtml 进行高亮显示?
- windows - 在 VB 中打开 Windows 10 通用应用程序中的现有视图?
- javascript - Html Javascript更改行
- typescript - 两个组件之间的三斜杠指令
- ruby - 将环境与 rack_test 一起使用
- swift - 我的应用程序只是快速显示我的数据库的一个值
- python - Pandas:根据索引+列对的数量选择行
- android - 导航离开时的 StartDestination NullpointerException onSaveInstance
- java - 如果有多个间歇性中断/返回,声明式风格会失败吗?
- nlp - 如何从文本中提取rentprice?