Angular 2 个带有 SVG <textPath> xlink:ref 属性的模板未通过 ID 引用关联的 <path>
Angular 2 template with SVG <textPath> xlink:ref attribute not referencing associated <path> via ID
我有一个 Angular 2+ 组件,其模板中包含 SVG,并且运行良好。
template: `
<svg:path class="OutlineSegment" [attr.d]="svgPath" id="outlineSegmentPath"></svg:path>
<svg:text class="DartDistanceOnSeam">
<svg:textPath alignment-baseline="top" xlink:href="#outlineSegmentPath">
{{ length | number: '1.2-2' }} {{ displayUnit }}
</svg:textPath>
</svg:text>
`
唉,组件的所有实例的所有文本都沿着相同的路径呈现,因为它们似乎引用相同的#outlineSegmentPath。
我似乎无法定位在此组件中创建的特定路径。当然,路径的 ID 属性在模板中是静态的。
我是否需要自己生成唯一 ID,或者它们是一种 Angular 将 ID 和 xlink:href 引用编织在一起的方法吗?
我通过生成自己的 id 来在路径和 textPath 标记中呈现来解决这个问题。我使用了 UUID。
private _id: string;
get id(): string {
if (!this._id) {
this._id = UUID.UUID(); // from from 'angular2-uuid'
}
return this._id;
}
get hashId(): string {
return `#${this.id}`;
}
并在模板中:
<svg:path [attr.d]="svgPath" [attr.id]="id"></svg:path>
<svg:text dy="-4">
<svg:textPath [attr.xlink:href]="hashId">
{{ length | number: '1.1-1' }} {{ displayUnit }}
</svg:textPath>
</svg:text>
我有一个 Angular 2+ 组件,其模板中包含 SVG,并且运行良好。
template: `
<svg:path class="OutlineSegment" [attr.d]="svgPath" id="outlineSegmentPath"></svg:path>
<svg:text class="DartDistanceOnSeam">
<svg:textPath alignment-baseline="top" xlink:href="#outlineSegmentPath">
{{ length | number: '1.2-2' }} {{ displayUnit }}
</svg:textPath>
</svg:text>
`
唉,组件的所有实例的所有文本都沿着相同的路径呈现,因为它们似乎引用相同的#outlineSegmentPath。
我似乎无法定位在此组件中创建的特定路径。当然,路径的 ID 属性在模板中是静态的。
我是否需要自己生成唯一 ID,或者它们是一种 Angular 将 ID 和 xlink:href 引用编织在一起的方法吗?
我通过生成自己的 id 来在路径和 textPath 标记中呈现来解决这个问题。我使用了 UUID。
private _id: string;
get id(): string {
if (!this._id) {
this._id = UUID.UUID(); // from from 'angular2-uuid'
}
return this._id;
}
get hashId(): string {
return `#${this.id}`;
}
并在模板中:
<svg:path [attr.d]="svgPath" [attr.id]="id"></svg:path>
<svg:text dy="-4">
<svg:textPath [attr.xlink:href]="hashId">
{{ length | number: '1.1-1' }} {{ displayUnit }}
</svg:textPath>
</svg:text>