为来自其他父组件的 div 提供动态 ID
Give dynamic ID to a div which comes from other parent component
我有一个如下所示的图表组件:
<div id="chart">
<ngx-charts-bar-horizontal [view]="view" [trimYAxisTicks]="false" [xAxisTickFormatting]="convertDecimalToNumber" [scheme]="colorScheme" [results]="data" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [showXAxisLabel]="showXAxisLabel" [showDataLabel]="showDataLabel" [xAxisLabel]="xAxisLabel" [barPadding]="40">
</ngx-charts-bar-horizontal>
</div>
我正在通过它的父级 div 操作此图表的所有样式,这里有 id="chart"
,但我需要在父级组件中使用上述相同组件 2 次!所以这会产生相同 2 个 ID 的问题。
所以,我决定从父组件传递 div 的 id 作为 @Input()
,如下所示:
<div class="container">
<!-- Other tags -->
<child-component [chartId]="users"></child-component>
<!-- Other tags -->
<child-component [chartId]="visuals"></child-component>
<!-- Other tags -->
</div>
编辑子组件:
TS 文件:
@Input() chartId: string;
HTML:
<div [id]="chartId">
<ngx-charts-bar-horizontal [view]="view" [trimYAxisTicks]="false" [xAxisTickFormatting]="convertDecimalToNumber" [scheme]="colorScheme" [results]="data" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [showXAxisLabel]="showXAxisLabel" [showDataLabel]="showDataLabel" [xAxisLabel]="xAxisLabel" [barPadding]="40">
</ngx-charts-bar-horizontal>
</div>
I tried these techniques: [id]="chartId", [attr.id]="chartId", id="{{chartId}}"
但上面的 none 可以从输入设置动态 ID。
有时问题出在您的 ViewEncapsulation 级别。
更重要的是,如果您尝试在 <ngx-charts-bar-horizontal/>
中设置 dom 元素的样式。
我认为您可以在 ChildComponent.
中使用 ViewEncapsulation.None 选项
在parent component.html:
<div class="container">
<!-- Other tags -->
<child-component chartId="users"></child-component>
<!-- Other tags -->
<child-component chartId="visuals"></child-component>
<!-- Other tags -->
</div>
在你的 child component.ts 中:
@Input() chartId: string;
并在您的 child component.html 文件中:
<div id="{{ chartId }}">
<ngx-charts-bar-horizontal [view]="view" [trimYAxisTicks]="false" [xAxisTickFormatting]="convertDecimalToNumber" [scheme]="colorScheme" [results]="data" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [showXAxisLabel]="showXAxisLabel" [showDataLabel]="showDataLabel" [xAxisLabel]="xAxisLabel" [barPadding]="40">
</ngx-charts-bar-horizontal>
</div>
编辑
如果上述解决方案对您不起作用,请尝试以下方法:
在parentcomponent.ts文件中声明两个变量:
users: string = 'yourID1';
visuals: string = 'yourID2';
并在 parent component.html:
<div class="container">
<!-- Other tags -->
<child-component [chartId]="users"></child-component>
<!-- Other tags -->
<child-component [chartId]="visuals"></child-component>
<!-- Other tags -->
</div>
希望对您有所帮助
HTML:
<div id="chart"> </div>
组件:
@Input() chartId: string;
ngOnChanges(): void {
const parent_div = document.getElementById('chart');
parent_div.setAttribute('id', this.chartId);
}
在您的子组件中提供一些初始 ID 作为默认值并使用 ngOnChanges 更新 ID。
我有一个如下所示的图表组件:
<div id="chart">
<ngx-charts-bar-horizontal [view]="view" [trimYAxisTicks]="false" [xAxisTickFormatting]="convertDecimalToNumber" [scheme]="colorScheme" [results]="data" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [showXAxisLabel]="showXAxisLabel" [showDataLabel]="showDataLabel" [xAxisLabel]="xAxisLabel" [barPadding]="40">
</ngx-charts-bar-horizontal>
</div>
我正在通过它的父级 div 操作此图表的所有样式,这里有 id="chart"
,但我需要在父级组件中使用上述相同组件 2 次!所以这会产生相同 2 个 ID 的问题。
所以,我决定从父组件传递 div 的 id 作为 @Input()
,如下所示:
<div class="container">
<!-- Other tags -->
<child-component [chartId]="users"></child-component>
<!-- Other tags -->
<child-component [chartId]="visuals"></child-component>
<!-- Other tags -->
</div>
编辑子组件:
TS 文件:
@Input() chartId: string;
HTML:
<div [id]="chartId">
<ngx-charts-bar-horizontal [view]="view" [trimYAxisTicks]="false" [xAxisTickFormatting]="convertDecimalToNumber" [scheme]="colorScheme" [results]="data" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [showXAxisLabel]="showXAxisLabel" [showDataLabel]="showDataLabel" [xAxisLabel]="xAxisLabel" [barPadding]="40">
</ngx-charts-bar-horizontal>
</div>
I tried these techniques: [id]="chartId", [attr.id]="chartId", id="{{chartId}}"
但上面的 none 可以从输入设置动态 ID。
有时问题出在您的 ViewEncapsulation 级别。
更重要的是,如果您尝试在 <ngx-charts-bar-horizontal/>
中设置 dom 元素的样式。
我认为您可以在 ChildComponent.
中使用 ViewEncapsulation.None 选项在parent component.html:
<div class="container">
<!-- Other tags -->
<child-component chartId="users"></child-component>
<!-- Other tags -->
<child-component chartId="visuals"></child-component>
<!-- Other tags -->
</div>
在你的 child component.ts 中:
@Input() chartId: string;
并在您的 child component.html 文件中:
<div id="{{ chartId }}">
<ngx-charts-bar-horizontal [view]="view" [trimYAxisTicks]="false" [xAxisTickFormatting]="convertDecimalToNumber" [scheme]="colorScheme" [results]="data" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [showXAxisLabel]="showXAxisLabel" [showDataLabel]="showDataLabel" [xAxisLabel]="xAxisLabel" [barPadding]="40">
</ngx-charts-bar-horizontal>
</div>
编辑
如果上述解决方案对您不起作用,请尝试以下方法:
在parentcomponent.ts文件中声明两个变量:
users: string = 'yourID1';
visuals: string = 'yourID2';
并在 parent component.html:
<div class="container">
<!-- Other tags -->
<child-component [chartId]="users"></child-component>
<!-- Other tags -->
<child-component [chartId]="visuals"></child-component>
<!-- Other tags -->
</div>
希望对您有所帮助
HTML:
<div id="chart"> </div>
组件:
@Input() chartId: string;
ngOnChanges(): void {
const parent_div = document.getElementById('chart');
parent_div.setAttribute('id', this.chartId);
}
在您的子组件中提供一些初始 ID 作为默认值并使用 ngOnChanges 更新 ID。