(Vue版本-2,Vuetify和Storybook-最新)

考虑以下简单的按钮组件:

<template>
  <v-btn round
    color="primary">
    <slot></slot>
  </v-btn>
</template>

<script>
export default {
  name: "test-button",
}
</script>

在App组件文件中,它的调用方式如下:

  <v-app>
    <v-layout column justify-center>
      <v-layout row justify-center align-center>
         <test-button @click="testBtnClicked">
           Click It
         </test-button>
      </v-layout>
    </v-layout>
  </v-app>

Vuetify设置在main.js中如下所示:

import Vue from 'vue';
import 'vuetify/dist/vuetify.min.css';
import Vuetify from "vuetify";
import colors from 'vuetify/es5/util/colors';

Vue.use(Vuetify, {
  theme: {
    primary: colors.indigo.base,
    info: colors.blue.lighten2,
    accent: colors.green.lighten1,
    error: colors.red.darken2
  }
});

到目前为止,一切都很好-在框架中间,我得到了一个不错的靛蓝按钮,这正是我所期望的。

现在,在Storybook配置中,我使用与main.js中相同的行来设置Vuetify,并且我的Storybook文件如下所示:

import { storiesOf } from "@storybook/vue";

import TestButton from "./TestButton.vue";

storiesOf("TestButton", module)
  .add("button template", () => ({
    template: '<test-button :rounded="true">round</test-button>',
    components: {TestButton}
  }))

这样就可以在Storybook中渲染按钮,但是主题设置不会发生,例如:按钮不是靛蓝色,而是白色。其余的Vuetify属性似乎还不错-看起来像一个Vuetify圆形按钮,带有白色文本。

我不确定这是Vuetify问题还是Vue问题或Storybook问题(或我方面的用户错误问题)。如果有人这样做,我将不胜感激。

这是我的webpack.config.js(在.storybook中):

module.exports = (baseConfig, env, defaultConfig) => {

  defaultConfig.plugins.push(new VueLoaderPlugin());

  return defaultConfig;
};

最佳答案

我也有问题

阅读vuetify的代码后,似乎是CSS的生成,并且在这里的VApp mixin app-theme中注入(inject)了主题。

因此,我认为问题并不与故事书有关,而应与事实相关。

通过包装我希望使用v-app进行测试的组件,就可以了。

因此,现在,请尝试像这样在config.js中添加装饰器:

import { configure, addDecorator } from '@storybook/vue';
import 'vuetify/dist/vuetify.css';

import Vue from 'vue';
import Vuetify from 'vuetify';

Vue.use(Vuetify, {
  theme: {
    // your colors
  },
});

addDecorator(() => ({
  template: '<v-app><story/></v-app>',
}));

...

听起来还好吗?

(也在github上回答:https://github.com/storybooks/storybook/issues/4256#issuecomment-440065778)

10-04 15:23