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

How to set attribute d pf path element in Angular 2?

我正在从事 Angular2 项目。

  class Coordinate {
      x:number;
      y:number;
    }

    class Data {
     .....
     coordinates: Array<Coordinate>;
     .........
    }

这是一个服务文件。我正在使用此服务访问我的组件的 .ts 文件中的数据。

我想用坐标数组在svg上画多段线。在模板文件中,我试图设置路径元素的属性 'd',但无法找到正确的语法。

以下是组件的.html文件部分

<div>
 <svg>
  <path [[How am I supposed to set the d attribute here]]/>
 </svg>
</div>

在 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 可能表示 - link 最后一个坐标第一个.

举个例子:

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 - 我为方便起见使用的间隔符。

constructPath(pathPoints) {
  let pathD = "";
  pathPoints.forEach((coordinate) => {
    pathD = pathD + coordinate.l + coordinate.x + "," + coordinate.y + item.s;
    });
  return pathD;
  }
}

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