You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Storybook是否不支持Vuetify的v-calendar与v-date-picker组件?

解决Storybook中Vuetify v-calendar/v-date-picker加载失败的问题

我来帮你排查下这个问题——v-calendar和v-date-picker是完全支持Storybook的,你的问题出在Vuetify的初始化配置和组件写法上,咱们一步步来修复:

1. 移除组件内重复的Vuetify初始化

首先看你calendar.vue里的代码,你在组件内执行了Vue.use(Vuetify),这是错误的。Vue.use()应该只在全局初始化时调用一次,重复调用会导致Vuetify内部状态冲突,直接删掉这两行:

import Vuetify from "vuetify";
Vue.use(Vuetify);

2. 配置Storybook全局Vuetify环境

Vuetify的大部分组件(包括日历、日期选择器)需要在v-app组件的上下文中才能正常工作,而且需要全局初始化Vuetify实例。你需要在.storybook/preview.js文件中添加全局配置:

import Vue from 'vue';
import Vuetify from 'vuetify';
import 'vuetify/dist/vuetify.min.css';
import '@mdi/font/css/materialdesignicons.css';

// 全局注册Vuetify
Vue.use(Vuetify);

// 创建Vuetify实例
const vuetify = new Vuetify({
  icons: {
    iconfont: 'mdi', // 对应你引入的@mdi/font
  },
});

// 用decorator给所有Story包裹v-app
export const decorators = [
  (story) => ({
    vuetify,
    render: (h) => h('v-app', [h(story())]),
  }),
];

这个配置会让所有Story都运行在Vuetify的v-app容器内,确保组件能获取到必要的样式和上下文。

3. 简化你的Story文件

你的calendar.stories.ts里不需要重复引入Vuetify和图标CSS(全局配置已经处理了),简化后的代码如下:

import myCalendar from "../components/Calendar.vue";

export default {
  title: 'Calendar-View',
  component: myCalendar,
};

const Template = (args: any, { argTypes }: any) => ({
  props: Object.keys(argTypes),
  components: { myCalendar },
  template: '<my-calendar v-bind="$props"/>',
});

export const Default = Template.bind({});
Default.args = {};

为什么之前会失败?

  • 组件内重复调用Vue.use(Vuetify)破坏了Vuetify的全局初始化状态
  • 没有将组件放在v-app中,Vuetify组件需要这个容器来加载样式和提供功能上下文
  • Storybook没有全局注入Vuetify实例,导致组件无法访问Vuetify的内部API

按照上面的步骤调整后,你的v-calendar和v-date-picker应该就能正常加载了。

内容的提问来源于stack exchange,提问作者Yogesh Vadekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:02:32