5

(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;
};
4

2 回答 2

6

我也有问题。

看了vuetify的代码,好像是CSS的生成,主题的注入是在位于此处的VAppmixin中进行的。app-theme

因此,我认为问题与故事书无关,而是与 vuetify 相关。

通过用 包装我希望测试的组件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 )

于 2018-11-19T22:33:30.740 回答
0

几个月前我遇到了这个问题,所以它在我的脑海中并不是最新鲜的。您需要导入将 Vuetify 添加到 Vue 的插件。这是config.js.storybook文件夹中的文件。

// #### /.storybook/config.js
import { configure } from '@storybook/vue';

import Vue from 'vue';
import Vuex from 'vuex'; // Vue plugins
import '@/plugins/allPlugins';

// Install Vue plugins.
Vue.use(Vuex);

const req = require.context('../src', true, /\.stories\.js$/)

function loadStories() {
  req.keys().forEach((filename) => req(filename))
}

configure(loadStories, module);

插件/所有插件

import Vue from 'vue'; // <---- important 
import './vuetify'; // <---- important 


import WebCam from 'vue-web-cam';
import Chat from '@/libs/vue-beautiful-chat/index';
import './styles';

import './ellipsis';
import 'viewerjs/dist/viewer.css';
import Viewer from 'v-viewer';

Vue.use(WebCam);
Vue.use(Chat);
Vue.use(Viewer);

插件/vuetify

import Vue from 'vue';
import {
  Vuetify,
  VApp,
  ...
} from 'vuetify';

import colors from 'vuetify/es5/util/colors';

Vue.use(Vuetify, {
  components: {
    VApp,
    ...
  },
  theme: {
    primary: colors.blue.lighten1,
    ...
  },
});

我将所有插件分开的原因是因为自定义样式和其他插件在导入时我可以更好地控制。如果您需要自定义样式,则需要同时导入Vuetify插件和自定义样式。

于 2018-09-29T02:52:23.847 回答