当前位置:   article > 正文

Vue3项目中快速引入ElementUI框架_vue3项目elementplusresolver

vue3项目elementplusresolver

ElementUI介绍

       ElementUI是一个强大的PC端UI组件框架,它不依赖于vue,但是却是当前和vue配合做项目开发的一个比较好的ui框架,其包含了布局(layout),容器(container)等各类组件,基本上能满足日常网站的搭建开发。针对vue2和vue3都有对应的组件版本,本文主要介绍在vue3中如何引入使用ElementUI(vue3中升级为Element Plus)。

安装

vue3中使用如下命令通过 npm 安装 (我也使用的安装方式)

$ npm install element-plus --save

也可以使用其他的包管理起进行安装:

  1. # Yarn
  2. $ yarn add element-plus
  3. # pnpm
  4. $ pnpm install element-plus

引入

      element-plus分为全局引入和按需引入两种方式,一般在工程项目中,由于全局引入会导致不必要的资源加载,为提升项目性能,建议进行按需引入。以下我们对两种引入方式进行介绍。

全局引入

       全局引入就是在项目入口(main.ts/main.js)文件直接引入组件以及组件全部的样式文件;代码如下所示:

  1. // main.ts
  2. import { createApp } from 'vue'
  3. import ElementPlus from 'element-plus' //全局引入
  4. import 'element-plus/dist/index.css'
  5. import App from './App.vue'
  6. const app = createApp(App)
  7. app.use(ElementPlus)
  8. app.mount('#app')

按需引入

      在vue3中按需引入ElementUI,需要使用其他的插件辅助,需要安装unplugin-vue-components 和 unplugin-auto-import这两款插件;安装方法如下:

npm install -D unplugin-vue-components unplugin-auto-import

然后再vite或者webpack配置中添加相应的配置,如下所示:

vite
  1. // vite.config.ts
  2. import { defineConfig } from 'vite'
  3. import AutoImport from 'unplugin-auto-import/vite'
  4. import Components from 'unplugin-vue-components/vite'
  5. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  6. export default defineConfig({
  7. // ...
  8. plugins: [
  9. // ...
  10. AutoImport({
  11. resolvers: [ElementPlusResolver()],
  12. }),
  13. Components({
  14. resolvers: [ElementPlusResolver()],
  15. }),
  16. ],
  17. })
Webpack
  1. // webpack.config.js
  2. const AutoImport = require('unplugin-auto-import/webpack')
  3. const Components = require('unplugin-vue-components/webpack')
  4. const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
  5. module.exports = {
  6. // ...
  7. plugins: [
  8. AutoImport({
  9. resolvers: [ElementPlusResolver()],
  10. }),
  11. Components({
  12. resolvers: [ElementPlusResolver()],
  13. }),
  14. ],
  15. }

日志再vue.config.js中,导入方法相同:

  1. const { defineConfig } = require('@vue/cli-service')
  2. const AutoImport = require('unplugin-auto-import/webpack')
  3. const Components = require('unplugin-vue-components/webpack')
  4. const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
  5. module.exports = defineConfig({
  6. configureWebpack: {
  7. plugins: [
  8. AutoImport({
  9. resolvers: [ElementPlusResolver()],
  10. }),
  11. Components({
  12. resolvers: [ElementPlusResolver()],
  13. }),
  14. ],
  15. }
  16. })

使用

       引入完毕之后,我们可进行按需引入需要使用的组件,使用方法如下,引入table、input、button等组件。

  1. <template>
  2. <div>
  3. <el-button @click="resetDateFilter">清除日期过滤器</el-button>
  4. <el-button @click="clearFilter">清除所有过滤器</el-button>
  5. <el-table
  6. ref="filterTable"
  7. :data="tableData"
  8. style="width: 100%">
  9. <el-table-column
  10. prop="date"
  11. label="日期"
  12. sortable
  13. width="180"
  14. column-key="date"
  15. :filters="[{text: '2016-05-01', value: '2016-05-01'}, {text: '2016-05-02', value: '2016-05-02'}, {text: '2016-05-03', value: '2016-05-03'}, {text: '2016-05-04', value: '2016-05-04'}]"
  16. :filter-method="filterHandler"
  17. >
  18. </el-table-column>
  19. <el-table-column
  20. prop="name"
  21. label="姓名"
  22. width="180">
  23. </el-table-column>
  24. <el-table-column
  25. prop="address"
  26. label="地址"
  27. :formatter="formatter">
  28. </el-table-column>
  29. <el-table-column
  30. prop="tag"
  31. label="标签"
  32. width="100"
  33. :filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]"
  34. :filter-method="filterTag"
  35. filter-placement="bottom-end">
  36. </el-table-column>
  37. </el-table>
  38. <el-input class="input" v-model="input" type="file" placeholder="Please input" />
  39. <el-button class="button" type="primary">文件处理</el-button>
  40. </div>
  41. </template>
  42. <script>
  43. import { ElButton, ElInput } from 'element-plus'
  44. import { ref } from 'vue'
  45. export default {
  46. components: { ElButton,ElInput },
  47. data() {
  48. return {
  49. tableData: [{
  50. date: '2016-05-02',
  51. name: '王小虎',
  52. address: '上海市普陀区金沙江路 1518 弄',
  53. tag: '家'
  54. }, {
  55. date: '2016-05-04',
  56. name: '王小虎',
  57. address: '上海市普陀区金沙江路 1517 弄',
  58. tag: '公司'
  59. }, {
  60. date: '2016-05-01',
  61. name: '王小虎',
  62. address: '上海市普陀区金沙江路 1519 弄',
  63. tag: '家'
  64. }, {
  65. date: '2016-05-03',
  66. name: '王小虎',
  67. address: '上海市普陀区金沙江路 1516 弄',
  68. tag: '公司'
  69. }]
  70. }
  71. },
  72. methods: {
  73. resetDateFilter() {
  74. this.$refs.filterTable.clearFilter('date');
  75. },
  76. clearFilter() {
  77. this.$refs.filterTable.clearFilter();
  78. },
  79. formatter(row, column) {
  80. return row.address;
  81. },
  82. filterTag(value, row) {
  83. return row.tag === value;
  84. },
  85. filterHandler(value, row, column) {
  86. const property = column['property'];
  87. return row[property] === value;
  88. }
  89. }
  90. }
  91. </script>
  92. <style scoped>
  93. .input {
  94. display: inline;
  95. margin: 20px 30px;
  96. }
  97. .button {
  98. width: 90px;
  99. }
  100. </style>

前端显示如下:

       ElementUI中还有其他组件,大部分都能满足开发需求,提升开发效率,更多组件请见官网开发文档。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/460346
推荐阅读
相关标签
  

闽ICP备14008679号