我正在开发一个Angular2项目。
class Coordinate {
x:number;
y:number;
}
class Data {
.....
coordinates: Array<Coordinate>;
.........
}
这是一个服务文件。我正在使用此服务访问Component的.ts文件中的数据。
我想使用坐标数组在svg上绘制折线。在模板文件中,我试图设置路径元素的属性“d”,但无法确定正确的语法。
以下是组件<。p>的.html文件部分
<div>
<svg>
<path [[How am I supposed to set the d attribute here]]/>
</svg>
</div>
答案 0 :(得分:0)
在Angular svg中需要一些特殊处理。这是一篇关于这个问题的非常好的文章:http://teropa.info/blog/2016/12/12/graphics-in-angular-2.html
现在,在模板中,它应该是:
<div>
<svg viewBox="0 0 480 480" preserveAspectRatio="xMidYMid meet" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg:g>
<svg:path [attr.d]="yourVarThatStoresPathString"></svg:path>
</svg:g>
</svg>
</div>
在你的ts文件中,你应该添加导致路径字符串的逻辑(例如yourVarThatStoresPathString =“M0,0 480,0 480,480 0,480 0,0”)。
因此,如果您有坐标数组(x,y),则可能需要一个将其转换为此类字符串的函数。同样在SVG中还有其他文字(字母)用于识别坐标周围的细节,如M0,0 - 意味着将铅笔移动到0,0并开始绘制,或者在坐标可能意味着Z之后 - 将最后一个坐标与第一个坐标连接起来。 / p>
就像例子一样:
let pathPoints = [
{
l: "M",
x: 135.00,
y: 245.00,
s: " "
},
{
l: "",
x: 135.00,
y: 110.00,
s: " "
},
{
l: "",
x: 345.00,
y: 110.00,
s: " "
},
{
l: "",
x: 345.00,
y: 245.00,
s: " "
},
{
l: "",
x: 345.00,
y: 380.00,
s: " "
},
{
l: "",
x: 135.00,
y: 380.00,
s: " "
},
{
l: "",
x: 135.00,
y: 245.00,
s: "Z"
},
]
l =字母,s - spacer我方便使用。
constructPath(pathPoints) {
let pathD = "";
pathPoints.forEach((coordinate) => {
pathD = pathD + coordinate.l + coordinate.x + "," + coordinate.y + item.s;
});
return pathD;
}
}
这当然是一些伪代码,但应该给你一个方向。