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

标签 javascript node.js angular typescript d3.js

我需要将一些信息图表添加到 Angular 5 应用程序中。为此,我选择了 d3.js。我还需要能够导出图形,即使用 Node 制作 SVG 并将它们包装在 PDF 中。

幸运的是,让浏览器中的 d3 图形在 node.js 上工作的代码相当简单。以下几行就是这样做的……

const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;

之后只需要对在浏览器中运行的代码进行微小的更改。

显然我不想拥有几乎相同代码的 2 个副本,所以我需要一种方法来组织在 Angular 应用程序端创建 SVG 的函数的使用(如果是 Typescript 而不是 javascript,我更喜欢)和 Node 应用程序端。不幸的是,我在 Node 方面没有太多经验,也没有找到一个简单的解决方案。

这是我的问题...

  1. 我怎样才能简单地组织使用 d3 通过 angular 5 应用程序和 node.js 应用程序创建 SVG 的函数的使用?
  2. 也许用 node 渲染 d3.js 不是最好的解决方案,还有另一种更简单的方法?

提前致谢!

最佳答案

我想建议以下解决方案。

首先,不管你现在实际使用的是哪种前端框架。 如果我的想法正确,您需要有 d3js 图表的图片/屏幕截图,以便将来在PDF 中使用>。是否正确?

您需要编写一个实用程序,以便能够使用您的图表组件打开真实网页并制作屏幕截图(具有您想要的分辨率)它可能是 Protractor 与 chrome-browser 的组合,例如. (有很多解决方案,实际上,我们甚至可以使用 PhantomJS。根据我的经验,使用 Protractor 更简单,更容易实现)。此外,Protractor 有一个内部功能,可以制作页面的屏幕截图并保存到特定文件夹。

采用该解决方案我们有哪些好处:

  • 唯一一个有图表渲染相关源码的地方
  • 100% 确定图 TableView 与真实网页上的 View 相同(带有 其他 Angular 分量)
  • 我们不需要找到在 Node.JS 端渲染 SVG 的方式等等...

作业可能如下所示:

  • 启动一些 NPM/Gulp/Grunt(无论什么)任务来打开特定的 使用 Protractor 和 Chrome 浏览器访问您的网络应用页面。
  • 打开只有图表组件 + 数据层的虚拟页面。
  • 截屏并保存到特定文件夹。使用截图 PDF 中的图表(手动或使用其他工具)

关于javascript - d3.js:在 Angular 应用程序和 node.js 上运行相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52275173/

相关文章:

javascript - 使用特殊字符对 UTF-8 中的单词中的句子进行标记

javascript - Angular 8 - 在错误时处理 SSE 重新连接

javascript - 子菜单 - 菜单栏中的淡入和淡出子菜单

node.js - sveltekit 中未定义 process.env 环境变量

node.js - 队列和api的嵌套公牛独立进程

javascript - lodash 按数组 Angular 5 过滤对象数组

javascript - 从 Angular 中的 Node.js 获取响应

javascript - 如何使用 Javascript 创建 <style> 标签?

javascript - jQuery 定位 `ul` 中的下一个 `li` 元素,类为 `active`

javascript - 从另一个对象中删除对象 - 意外行为