如何在Angular 2中设置属性d pf path元素?

时间:2018-06-15 14:07:36

标签: angular svg angular2-template

我正在开发一个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>

1 个答案:

答案 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;
  }
}

这当然是一些伪代码,但应该给你一个方向。