将 D3.js 导入 Angular 2 应用程序的正确方法

Posted

技术标签:

【中文标题】将 D3.js 导入 Angular 2 应用程序的正确方法【英文标题】:Correct Way to Import D3.js into an Angular 2 Application 【发布时间】:2016-11-15 01:29:12 【问题描述】:

在 Angular 2.0.0-rc.4 应用程序中导入和使用 D3 的正确方法存在很多差异。我见过:

1) 添加到根 index.html 文件中:

<script src="https://d3js.org/d3.v4.min.js"></script>

然后使用:

Import * as d3 from 'd3';

在我想在其中实现 D3 视觉效果的任何组件文件中。

2) 使用 npm:

npm install d3 --save
typings install d3 --save

然后还在使用:

Import * as d3 from 'd3';

虽然使用 TypeScript 2.0.0 Beta(如果我正确阅读了文档)我可以做到:

npm install --save @types/d3

然后真正使用:

Import * as d3 from 'd3';

-- 两种方式,在var map = 中添加以下内容到systemjs.config.js

'd3':'node_modules/d3/d3.min.js'

并添加到var packages =

'd3':main:'build/d3.js',defaultExtension:'js'

谁能确认实现 D3 的正确方法?谢谢。

【问题讨论】:

想知道,因为我的 import d3 给了我一条红线“找不到模块”。我做了 npm install d3 上述选项 2 的细微变化对我有用,请参阅:gist.github.com/satyagraha/5544424965c41f261ac245a92673aa71 【参考方案1】:

对我有用的唯一方法是创建一个文件“custom-d3.ts”,在里面我导出我需要的东西(例如):

export * from 'd3-axis';
export * from 'd3-format';
export * from 'd3-interpolate';
export * from 'd3-scale';
export * from 'd3-selection';
export * from 'd3-shape';

然后在我的其他 ts 文件中,我可以将 d3 导入为:import * as d3 from '.../../custom-d3.ts'

我通过安装输入 @types/d3 来自动完成,并且打字稿没有错误。

您还可以使用这个库来为您完成所有这些工作,并且可以在您的课程中注入:https://github.com/tomwanzek/d3-ng2-service

【讨论】:

如果您不太担心有多少 d3 模块(例如,在开发期间),您可以使用 import * as d3 from "d3"; 导入所有 d3 模块,当您开始生产时,您将希望使用 Oliver 的示例,即与 Angular2 团队建议使用 rxjs 的方式非常相似。【参考方案2】:

我不确定这是否是正确的方法,但在您的 typings/index.d.ts 文件中添加类似 /// &lt;reference path="modules/d3/d3.d.ts" /&gt;. 的内容

我没有弄乱 systemjs.config.js,也不需要组件中的任何其他导入语句,但似乎可以解决问题,我没有收到任何红色错误。

【讨论】:

以上是关于将 D3.js 导入 Angular 2 应用程序的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将 D3.js 与 Renderer API 与 Angular 2 集成

Angular 2.0 和 D3.js 不在 svg 上应用 Css [重复]

升级到 Angular 8 后出现 d3.js 运行时错误

d3.js:在 Angular 应用程序和 node.js 上运行相同的代码

通过 npm 为 Angular 2 TypeScript 项目安装 d3.js 有啥好处吗?

如何在带有 D3 的 Angular 中使用“this”?