我尝试在Nuxt 3项目中使用D3扩展,为此我在plugins/
目录中创建了一个d3.client.js
文件。
import * as d3 from "d3";
import { defineNuxtPlugin } from '#app'
export default defineNuxtPlugin(nuxtApp => {
nuxtApp.vueApp.use(d3)
})
然而,当我尝试使用它给我一个500内部服务器错误document is not defined
。
<script>
import * as d3 from "d3";
export default {
name: "globe",
created() {
d3.select("#globe");
}
}
</script>
我该如何解决这个问题?
2条答案
按热度按时间crcmnpdw1#
d3.select()
在幕后使用document.querySelector()
。由于您在服务器端工作,因此还不能访问document
。因此,您需要模拟它或避免使用它。通过向
d3.select()
传递一个元素而不是一个字符串,可以避免同时使用所有这些元素,因为这样会创建一个功能正常的d3选择,而无需运行document.querySelector()
。由于其他链接的.select()
或.selectAll()
都使用previousSelection.querySelector()
,因此可以从那里继续。如果您无法直接访问DOM元素,则可能需要模拟
document
。This article建议使用JSDOM:ztmd8pv52#
我设法通过使用
d3.select
和Vue参考来解决它。