【发布时间】:2016-09-02 00:21:58
【问题描述】:
我正在尝试在我的 angular2 webapp 中使用d3.js liquid fill gauge,但剪辑路径不起作用,这意味着根本没有创建任何波。
由于 angular2 正在运行 typescript,所以我调整了一些东西来修复语法错误。剪辑路径的代码sn-p如下。
// The clipping wave area.
var clipArea = d3.svg.area()
.x(function(d) { return waveScaleX(d[0]); } ) // it was d.x in js version
.y0(function(d) { return waveScaleY(Math.sin(Math.PI*2*config.waveOffset*-1 + Math.PI*2*(1-config.waveCount) + d[1]*2*Math.PI));} ) // it was d.y in js version
.y1(function(d) { return (fillCircleRadius*2 + waveHeight); } );
var waveGroup = gaugeGroup.append("defs")
.append("clipPath")
.attr("id", "clipWave" + elementId);
var wave = waveGroup.append("path")
.datum(data)
.attr("d", clipArea)
.attr("T", 0);
// The inner circle with the clipping wave attached.
var fillCircleGroup = gaugeGroup.append("g")
.attr("clip-path", "url(#clipWave" + elementId + ")"); //clippath not working
fillCircleGroup.append("circle")
.attr("cx", radius)
.attr("cy", radius)
.attr("r", fillCircleRadius)
.style("fill", config.waveColor);
我不知道如何解决它。将return waveScaleX(d.x) 更改为return waveScaleX(d[0]) 是否可能失败?但是 typescript 不接受前一种语法。
【问题讨论】:
-
你的数据是什么样的?打字稿抛出什么错误?
-
@Mark 如果我使用
d.x,打字稿错误是Property 'x' does not exist on type [number, number]。data是一个类似 `var data = []; 的数组。 for(var i = 0; i -
所以,我刚刚回到这个问题。我非常努力地在this example 中重现您的错误。我使用了 typescript 和 angular2(候选发布版),但无法复制错误。
-
@Mark 非常感谢您的努力!太奇妙了!我注意到您的示例和我的代码的区别在于您在 systemJS 文件中导入
liquidFillGuage并在 angular2 中将其用作import * as liquidFillGuage from 'liquidFillGuage';而我只是将这些 js 代码复制到我的 angular2 组件中并调整代码以修复语法错误。这些天我也google了很多,看来你的方法是我们应该在angular2中使用js文件的。我试试看。 -
@Mark 顺便说一句,我看到其他文章提到为要导入的 js 文件创建一个
.d.ts。你没有这样做,但你的代码仍然有效。这里有什么魔力?
标签: javascript d3.js typescript angular