angular - 使用组件时是否可以访问组件变量?
问题描述
我有一个 Angular 的 7 个组件模板,如下所示:
<div class="measure">
<ng-content select="[label]"></ng-content>
<div class="chart">
<div class="state" [style.width.%]="progress"> </div>
</div>
<ng-content select="[value]"></ng-content>
</div>
如您所见progress
,该组件中有一个变量:
export class ProgressComponent implements OnInit {
@Input() current: any;
@Input() maximum: any;
@Input() minimum: any;
progress: number;
ngOnInit() {
// Some code
}
}
使用组件时有没有办法使用变量progress
:
<mk-progress [minimum]="0" [maximum]="100" [current]="50" class="test">
<span label>Label</span>
<span value>{{progress}}%</span>
</mk-progress>
我正在尝试在代码行中使用它:
<span value>{{progress}}%</span>
解决方案
这是不可能的<ng-content>
。但是,您可以通过投影模板而不是常规内容来实现它。
然后,您的组件将呈现这些模板,而不是ng-content
via <ng-container>
,ngTemplateOutlet
并为这些模板设置上下文。
通过使用结构指令(*
在指令前添加一个),您可以有效地将注入的内容与模板包装起来。
通过@ContentChild
在您的组件中使用,您可以引用这些模板来实例化它们。
为了在使用组件时访问模板上下文,您可以使用let
模板上的关键字为implicit
上下文设置别名,然后引用它。
<div class="measure">
<ng-container *ngTemplateOutlet="labelTemplate; context: templateContext"></ng-container>
<div class="chart">
<div class="state" [style.width.%]="progress"> </div>
</div>
<ng-container *ngTemplateOutlet="valueTemplate; context: templateContext"></ng-container>
</div>
export class ProgressComponent implements OnInit {
@Input() current: any;
@Input() maximum: any;
@Input() minimum: any;
@ContentChild(LabelDirective, { read: TemplateRef }) labelTemplate;
@ContentChild(ValueDirective, { read: TemplateRef }) valueTemplate;
progress: number;
templateContext = { $implicit: this };
ngOnInit() {
// Some code
}
}
<mk-progress [minimum]="0" [maximum]="100" [current]="50" class="test">
<span *label>Label</span>
<span *value="let item">{{ item.progress }}%</span>
</mk-progress>
如果未提供模板,此技术还允许您提供默认内容:
<ng-container *ngTemplateOutlet="valueTemplate ? valueTemplate : defaultTemplate; context: templateContext">
</ng-container>
<ng-template #defaultTemplate>
default thing to show
</ng-template>
有关更多详细信息,请参阅本文。
推荐阅读
- go - 位操作使有符号整数变为无符号
- opencl - 未找到带有 OpenCL 2.1 NEO CPU 设备的 Ubuntu 20.04 Intel
- google-apps-script - 尝试使用脚本创建 Gmail 草稿时出现异常错误,您能帮我解决这个问题吗?
- mongodb - 在 mongo db 集合中查找过去 24 小时的更新查询执行计数
- python - Tkinter - 根据另一个组合框选择动态添加和删除一个组合框中的值
- javascript - 在 reactJS 中实现列表水平滚动的最佳方法是什么?我也可以在反应代码中使用 getElementById 吗?
- microservices - 如何正确处理相关 ID?
- angular - 如何最好地处理模板上同一个 observable 的多个订阅?
- php - 使用 PHP 访问 POSIX IPC 消息队列
- javascript - Java 脚本执行程序 - 传递单引号字符获取“意外标识符”错误