将 vue.js 与语义 UI 结合使用
Using vue.js with semantic UI
我正在尝试将 webpack + Semantic UI 与 Vue.js 一起使用,我发现了这个库 https://vueui.github.io/
但是编译有问题:
ERROR in ./~/vue-ui/components/sidebar/sidebar.jade
Module parse failed: /Project/node_modules/vue-
ui/components/sidebar/sidebar.jade Unexpected token (1:24)
You may need an appropriate loader to handle this file type.
所以我安装了 jade(pug) 但还是不行。
github 中有关于该库的评论:
WIP,请勿使用 ( https://github.com/vueui/vue-ui )
我已经成功地在我的模板中导入语义 css,如下所示:
@import './assets/libs/semantic/dist/semantic.min.css';
但这里的问题是我无法使用 semantic.js 调光器等功能。
问题是我已经有一些用语义编写的旧代码库,最好不要使用任何其他 css 框架(bootstrap 或实现)。
有什么优雅的方法可以在我的 vue.js 项目中包含语义 UI 吗?
1) 安装 jQuery 如果没有安装(正确!):
npm install --save jquery
然后在你的webpack.config文件中(我刚把它添加到webpack.dev.config.js , 但也许将其添加到产品配置文件中):
在插件中添加一个new webpack.ProvidePlugin
new webpack.ProvidePlugin({
// jquery
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery'
})
现在 jQuery 可用于所有应用程序和组件。
好消息是,现在对于您要使用的所有外部库(Numeral、Moment 等)都是相同的过程,当然还有语义-ui!
我们走吧:
npm install --save semantic-ui-css
nb :您可以使用主仓库(即 semantic-ui),但 semantic-ui-css 是 semantic-ui.
所以,现在,您必须首先在 webpack.base.config.js 文件中定义别名:
在resolve.alias
下添加语义的别名:
resolve: {
extensions: ['', '.js', '.vue'],
fallback: [path.join(__dirname, '../node_modules')],
alias: {
'src': path.resolve(__dirname, '../src'),
'assets': path.resolve(__dirname, '../src/assets'),
'components': path.resolve(__dirname, '../src/components'),
// adding our externals libs
'semantic': path.resolve(__dirname, '../node_modules/semantic-ui-css/semantic.min.js')
}
}
nb : 你可以把你的其他外部库别名放在那里:
// adding our externals libs
'moment': path.resolve(__dirname, '../node_modules/moment/min/moment-with-locales.js'),
'numeral': path.resolve(__dirname, '../node_modules/numeral/min/numeral.min.js'),
'gridster': path.resolve(__dirname, '../node_modules/gridster/dist/jquery.gridster.min.js'),
'semantic': path.resolve(__dirname, '../node_modules/semantic-ui-css/semantic.min.js'),
'stapes': path.resolve(__dirname, '../node_modules/stapes/stapes.min.js')
nb : 在那里使用你自己的路径(通常它们应该看起来像那些!)
...我们即将结束...
下一步是添加对插件提供者的别名引用,就像我们为 jQuery =)
做的一样
new webpack.ProvidePlugin({
// jquery
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
// semantic-ui | TODO : is usefull since we import it
semantic: 'semantic-ui-css',
Semantic: 'semantic-ui-css',
'semantic-ui': 'semantic-ui-css'
})
nb :这里我使用了几个名字,也许 semantic 就足够了 ;-)
同样,您可以在此处添加 lib/alias:
new webpack.ProvidePlugin({
// jquery
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
// gridster
gridster: 'gridster',
Gridster: 'gridster',
// highcharts
highcharts: 'highcharts',
Highcharts: 'highcharts',
// semantic-ui | TODO : is usefull since we import it
semantic: 'semantic-ui-css',
Semantic: 'semantic-ui-css',
'semantic-ui': 'semantic-ui-css',
// Moment
moment: 'moment',
Moment: 'moment',
// Numeral
numeral: 'numeral',
Numeral: 'numeral',
// lodash
'_': 'lodash',
'lodash': 'lodash',
'Lodash': 'lodash',
// stapes
stapes: 'stapes',
Stapes: 'stapes'
})
这是我在我自己的项目中使用的所有外部库(你可以看到 gridster,它是一个 jQuery 插件 - 就像 semantic-ui 一样!)
现在,只剩下最后一件事了:
添加语义css :
我通过在 main.js 文件的开头添加这一行来做到这一点:
import '../node_modules/semantic-ui-css/semantic.min.css'
然后,在这一行之后添加:
import semantic from 'semantic'
现在可以使用了。
我的 Vuejs 文件中的示例:
<div class="dimension-list-item">
<div class="ui toggle checkbox"
:class="{ disabled : item.disabled }">
<input type="checkbox"
v-model="item.selected"
:id="item.id"
:disabled="item.disabled">
<label :class="{disabled : item.disabled}" :for="item.id">{{item.label}} / {{item.selected}}</label>
</div>
</div>
此代码段为带有复选框的列表创建了一个简单的单元格。
在脚本中:
export default {
props: ['item'],
ready() {
$(this.$el.childNodes[1]).checkbox()
}
}
这里是结果:
sample1
sample2
正常情况下,一切正常。
I have just started to develop with Vuejs last week, so, maybe there
is a better way to to that ;-)
- 安装jquery
npm install jquery
- 安装语义-ui-css
npm install semantic-ui-css
- 将此添加到 main.js
window.$ = window.jQuery = require('jquery')
require('semantic-ui-css/semantic.css')
require('semantic-ui-css/semantic.js')
有点晚了,但现在你可以使用这个了:https://github.com/Semantic-UI-Vue/Semantic-UI-Vue。仍然是 WIP,但它具有所有基本功能。
相当容易使用:
import Vue form 'vue';
import SuiVue from 'semantic-ui-vue';
/* ... */
Vue.use(SuiVue);
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
},
template: '<sui-button primary>{{message}}</sui-button>'
});
API 与 React 版本非常相似:如果您使用过它,将会非常熟悉。
如果你想玩,这里有一个 JSFiddle:https://jsfiddle.net/pvjvekce/
免责声明:我是创作者
我是这样做的:
(注意:我使用vue-cli创建我的项目)
- cd 到您的 vue 项目目录并执行以下操作:
1- 安装 gulp:
npm install -g gulp
2-运行以下命令并按照说明安装。
npm install semantic-ui --save
cd semantic/
gulp build
3- 执行前面的命令后,您的 "semantic" 文件夹中应该有一个 "dist" 文件夹。将此文件夹移动到位于项目根目录的“/static”文件夹。
4- 在您的 html 模板文件中包含以下行:
<link rel="stylesheet" type="text/css" href="/static/dist/semantic.min.css">
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<script src="/static/dist/semantic.js"></script>
如果发生这种情况,其他一切正常,但您的按钮确保将此 .ui form
添加到您的表单中。
我正在尝试将 webpack + Semantic UI 与 Vue.js 一起使用,我发现了这个库 https://vueui.github.io/
但是编译有问题:
ERROR in ./~/vue-ui/components/sidebar/sidebar.jade
Module parse failed: /Project/node_modules/vue-
ui/components/sidebar/sidebar.jade Unexpected token (1:24)
You may need an appropriate loader to handle this file type.
所以我安装了 jade(pug) 但还是不行。
github 中有关于该库的评论:
WIP,请勿使用 ( https://github.com/vueui/vue-ui )
我已经成功地在我的模板中导入语义 css,如下所示:
@import './assets/libs/semantic/dist/semantic.min.css';
但这里的问题是我无法使用 semantic.js 调光器等功能。
问题是我已经有一些用语义编写的旧代码库,最好不要使用任何其他 css 框架(bootstrap 或实现)。
有什么优雅的方法可以在我的 vue.js 项目中包含语义 UI 吗?
1) 安装 jQuery 如果没有安装(正确!):
npm install --save jquery
然后在你的webpack.config文件中(我刚把它添加到webpack.dev.config.js , 但也许将其添加到产品配置文件中):
在插件中添加一个
new webpack.ProvidePlugin
new webpack.ProvidePlugin({ // jquery $: 'jquery', jQuery: 'jquery', 'window.jQuery': 'jquery' })
现在 jQuery 可用于所有应用程序和组件。
好消息是,现在对于您要使用的所有外部库(Numeral、Moment 等)都是相同的过程,当然还有语义-ui!
我们走吧:
npm install --save semantic-ui-css
nb :您可以使用主仓库(即 semantic-ui),但 semantic-ui-css 是 semantic-ui.
所以,现在,您必须首先在 webpack.base.config.js 文件中定义别名:
在resolve.alias
下添加语义的别名:
resolve: {
extensions: ['', '.js', '.vue'],
fallback: [path.join(__dirname, '../node_modules')],
alias: {
'src': path.resolve(__dirname, '../src'),
'assets': path.resolve(__dirname, '../src/assets'),
'components': path.resolve(__dirname, '../src/components'),
// adding our externals libs
'semantic': path.resolve(__dirname, '../node_modules/semantic-ui-css/semantic.min.js')
}
}
nb : 你可以把你的其他外部库别名放在那里:
// adding our externals libs
'moment': path.resolve(__dirname, '../node_modules/moment/min/moment-with-locales.js'),
'numeral': path.resolve(__dirname, '../node_modules/numeral/min/numeral.min.js'),
'gridster': path.resolve(__dirname, '../node_modules/gridster/dist/jquery.gridster.min.js'),
'semantic': path.resolve(__dirname, '../node_modules/semantic-ui-css/semantic.min.js'),
'stapes': path.resolve(__dirname, '../node_modules/stapes/stapes.min.js')
nb : 在那里使用你自己的路径(通常它们应该看起来像那些!)
...我们即将结束...
下一步是添加对插件提供者的别名引用,就像我们为 jQuery =)
做的一样new webpack.ProvidePlugin({
// jquery
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
// semantic-ui | TODO : is usefull since we import it
semantic: 'semantic-ui-css',
Semantic: 'semantic-ui-css',
'semantic-ui': 'semantic-ui-css'
})
nb :这里我使用了几个名字,也许 semantic 就足够了 ;-)
同样,您可以在此处添加 lib/alias:
new webpack.ProvidePlugin({
// jquery
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
// gridster
gridster: 'gridster',
Gridster: 'gridster',
// highcharts
highcharts: 'highcharts',
Highcharts: 'highcharts',
// semantic-ui | TODO : is usefull since we import it
semantic: 'semantic-ui-css',
Semantic: 'semantic-ui-css',
'semantic-ui': 'semantic-ui-css',
// Moment
moment: 'moment',
Moment: 'moment',
// Numeral
numeral: 'numeral',
Numeral: 'numeral',
// lodash
'_': 'lodash',
'lodash': 'lodash',
'Lodash': 'lodash',
// stapes
stapes: 'stapes',
Stapes: 'stapes'
})
这是我在我自己的项目中使用的所有外部库(你可以看到 gridster,它是一个 jQuery 插件 - 就像 semantic-ui 一样!)
现在,只剩下最后一件事了:
添加语义css :
我通过在 main.js 文件的开头添加这一行来做到这一点:
import '../node_modules/semantic-ui-css/semantic.min.css'
然后,在这一行之后添加:
import semantic from 'semantic'
现在可以使用了。
我的 Vuejs 文件中的示例:
<div class="dimension-list-item">
<div class="ui toggle checkbox"
:class="{ disabled : item.disabled }">
<input type="checkbox"
v-model="item.selected"
:id="item.id"
:disabled="item.disabled">
<label :class="{disabled : item.disabled}" :for="item.id">{{item.label}} / {{item.selected}}</label>
</div>
</div>
此代码段为带有复选框的列表创建了一个简单的单元格。
在脚本中:
export default {
props: ['item'],
ready() {
$(this.$el.childNodes[1]).checkbox()
}
}
这里是结果:
sample1
sample2
正常情况下,一切正常。
I have just started to develop with Vuejs last week, so, maybe there is a better way to to that ;-)
- 安装jquery
npm install jquery
- 安装语义-ui-css
npm install semantic-ui-css
- 将此添加到 main.js
window.$ = window.jQuery = require('jquery')
require('semantic-ui-css/semantic.css')
require('semantic-ui-css/semantic.js')
有点晚了,但现在你可以使用这个了:https://github.com/Semantic-UI-Vue/Semantic-UI-Vue。仍然是 WIP,但它具有所有基本功能。
相当容易使用:
import Vue form 'vue';
import SuiVue from 'semantic-ui-vue';
/* ... */
Vue.use(SuiVue);
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
},
template: '<sui-button primary>{{message}}</sui-button>'
});
API 与 React 版本非常相似:如果您使用过它,将会非常熟悉。
如果你想玩,这里有一个 JSFiddle:https://jsfiddle.net/pvjvekce/
免责声明:我是创作者
我是这样做的: (注意:我使用vue-cli创建我的项目)
- cd 到您的 vue 项目目录并执行以下操作:
1- 安装 gulp:
npm install -g gulp
2-运行以下命令并按照说明安装。
npm install semantic-ui --save
cd semantic/
gulp build
3- 执行前面的命令后,您的 "semantic" 文件夹中应该有一个 "dist" 文件夹。将此文件夹移动到位于项目根目录的“/static”文件夹。
4- 在您的 html 模板文件中包含以下行:
<link rel="stylesheet" type="text/css" href="/static/dist/semantic.min.css">
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<script src="/static/dist/semantic.js"></script>
如果发生这种情况,其他一切正常,但您的按钮确保将此 .ui form
添加到您的表单中。