Nuxt.js: window 未定义 apexcharts/vue-apexcharts
Nuxt.js: window is not defined apexcharts/vue-apexcharts
我添加了来自 apexcharts.com 的这个简单示例。很确定进口是正确的。我没有在任何地方引用 window。添加此文件时,我的整个应用程序都停止了。我认为这与 SSR 或 Nuxt 配置有关。
<template>
<div id="chart">
<apexchart
type="donut"
width="380"
:options="chartOptions"
:series="series"
></apexchart>
</div>
</template>
<script>
import VueApexCharts from "vue-apexcharts";
export default {
name: "Donut",
components: {
apexchart: VueApexCharts,
},
data() {
return {
data: {
series: [44, 55, 41, 17, 15],
chartOptions: {
chart: {
type: "donut",
},
responsive: [
{
breakpoint: 480,
options: {
chart: {
width: 200,
},
legend: {
position: "bottom",
},
},
},
],
},
},
};
},
};
</script>
将您的组件包装在 nuxt 的 <client-only>
组件中。这将防止 SSR/SSG 在尝试引用不存在的 window
对象时中断。
例如
<client-only>
<chart-component />
</client-only>
如 中所述(最后一句,使用直接组件语法),以下是如何进行正确的工作设置:
<template>
<div id="chart">
<client-only>
<apexchart
type="donut"
width="380"
:options="chartOptions"
:series="series"
></apexchart>
</client-only>
</div>
</template>
<script>
export default {
name: 'Donut',
components: {
[process.browser && 'apexchart']: () => import('vue-apexcharts'),
},
data() {
return {
series: [44, 55, 41, 17, 15],
chartOptions: {
chart: {
type: 'donut',
},
responsive: [
{
breakpoint: 480,
options: {
chart: {
width: 200,
},
legend: {
position: 'bottom',
},
},
},
],
},
}
},
}
</script>
我还删除了嵌套整个配置的 data
,它已经在 data()
中。这导致 non-match 在浏览器控制台错误中显示的道具方面。
我添加了来自 apexcharts.com 的这个简单示例。很确定进口是正确的。我没有在任何地方引用 window。添加此文件时,我的整个应用程序都停止了。我认为这与 SSR 或 Nuxt 配置有关。
<template>
<div id="chart">
<apexchart
type="donut"
width="380"
:options="chartOptions"
:series="series"
></apexchart>
</div>
</template>
<script>
import VueApexCharts from "vue-apexcharts";
export default {
name: "Donut",
components: {
apexchart: VueApexCharts,
},
data() {
return {
data: {
series: [44, 55, 41, 17, 15],
chartOptions: {
chart: {
type: "donut",
},
responsive: [
{
breakpoint: 480,
options: {
chart: {
width: 200,
},
legend: {
position: "bottom",
},
},
},
],
},
},
};
},
};
</script>
将您的组件包装在 nuxt 的 <client-only>
组件中。这将防止 SSR/SSG 在尝试引用不存在的 window
对象时中断。
例如
<client-only>
<chart-component />
</client-only>
如
<template>
<div id="chart">
<client-only>
<apexchart
type="donut"
width="380"
:options="chartOptions"
:series="series"
></apexchart>
</client-only>
</div>
</template>
<script>
export default {
name: 'Donut',
components: {
[process.browser && 'apexchart']: () => import('vue-apexcharts'),
},
data() {
return {
series: [44, 55, 41, 17, 15],
chartOptions: {
chart: {
type: 'donut',
},
responsive: [
{
breakpoint: 480,
options: {
chart: {
width: 200,
},
legend: {
position: 'bottom',
},
},
},
],
},
}
},
}
</script>
我还删除了嵌套整个配置的 data
,它已经在 data()
中。这导致 non-match 在浏览器控制台错误中显示的道具方面。