我正在使用 Vuetify 开发 Vue 应用,并使用 Storybook 记录组件。
我编写的故事很好,所有组件似乎都显示在 Storybook 中(例如我的自定义组件和 Vuetify 组件)。除了 VIcon 。
我有一个使用 Vuetify 的 VIcon 的组件,但我无法显示图标(在实际应用中这没有问题)
设置:
src / plugins / vuetify.js
import Vue from 'vue';
import Vuetify from 'vuetify/lib';
Vue.use(Vuetify);
export default new Vuetify({
icons: {
iconfont: 'mdiSvg',
}
});
.storybook / vuetify_storybook.js
import Vue from 'vue';
import Vuetify from 'vuetify'; // loads all components
import 'vuetify/dist/vuetify.min.css'; // all the css for components
import config from '@/plugins/vuetify'; // basic config with theme
Vue.use(Vuetify);
export default new Vuetify(config);
.storybook / preview.js
import { addDecorator } from '@storybook/vue';
import vuetify from './vuetify_storybook';
addDecorator(() => ({
vuetify,
template: `
<v-app>
<story />
</v-app>
`,
}));
.storybook / main.js
const path = require('path');
module.exports = {
stories: [
'../stories/**/*.stories.js',
'../src/**/*.stories.js'
],
addons: [
'@storybook/addon-actions',
'@storybook/addon-links',
'@storybook/addon-knobs',
'@storybook/addon-storysource'
],
webpackFinal: async (config, { configType }) => {
config.resolve.extensions.push('.vue', '.css', '.less', '.scss', '.sass', '.html')
// Use Sass loader for vuetify components
config.module.rules.push({
test: /\.sass$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
include: path.resolve(__dirname, '../'),
});
config.module.rules.push({
test: /\.scss$/,
use: [
'vue-style-loader',
'css-loader',
{
loader: 'sass-loader',
options: {
additionalData: "@import '@/styles/variables.scss';"
}
}
],
});
config.module.rules.push({
resolve: {
alias: {
'@': path.resolve(__dirname, '../src'),
vue: 'vue/dist/vue.js',
'vue$': 'vue/dist/vue.esm.js',
},
},
});
// Return the altered config
return config;
},
};
CustomVIcon.stories.js
import { withKnobs } from '@storybook/addon-knobs'
export default {
title: 'Display that icon',
decorators: [withKnobs]
}
export const displayIcon = () => {
return {
template: `<v-icon>mdi-alert</v-icon>`
}
}
如果我添加的文本不是 mdi图标(例如<v-icon>notmditext</v-icon>
),则会显示该文本-但只要添加- (破折号/减号)显示在字符串上,
我可以在控制台中看到图标的HTML(部分内容),仅缺少::before
部分(应该是实际的图标)。因此,当我检查“故事书”页面(图标应位于的位置)时,设置样式,添加类等。
https://www.npmjs.com/package/storybook-addon-jsx
(实际上是使用JSX渲染组件),没有任何变化(没有v-icon
)VCard
)放入故事中,并且它们出现了(其他故事运行得很好)vuetify/lib
(而不只是vuetify)
中的.storybook/vuetify_storybook.js
导入组件并在本地注册它们(在preview.js
和故事文件中-不变) 答案 0 :(得分:1)
好的,只需要对这些事物有另一种看法:
// remove this from public/index.html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
@mdi/js
更改为@mdi/font
npm remove @mdi/js
npm install @mdi/font -D
// add this to src/main.js & .storybook/vuetify_storybook.js
import '@mdi/font/css/materialdesignicons.css';
// in src/plugins/vuetify.js
icons: {
// iconfont: 'mdiSvg', // change this
iconfont: 'mdi', // to this
},
然后瞧瞧!出现 VIcon 。
因此,问题在于我认为所有设置均正确,但事实并非如此:应用程序中的图标来自CDN(没有查看网络标签),当我从index.html
删除CDN链接时,它立即变得显而易见。
有关在 Vuetify 中设置图标的更多信息:Install Material Design Icons