Vue + Element-UI —— 项目实战(一)

简介: Vue + Element-UI —— 项目实战(一)

项目演示

项目教学视频链接

https://www.bilibili.com/video/BV1dY411T71E?t=42.5

vue + element-ui 项目演示

一、项目实战一

Ⅰ、配置相关插件

1. 配置使用 Element

Element参考文档

  1. 安装 Element:在项目路径下终端键入以下命令:
  npm i element-ui -S

(全局引入)引入并使用 Element:在 main.js 中通过 import 导入,通过 Vue.use(xxx) 全局使用

  import ElementUI from 'element-ui';
  import 'element-ui/lib/theme-chalk/index.css';
  Vue.use(ElementUI)
  1. 按需引入)引入并使用 Element:在 main.js 中通过 import 导入 指定 组件,通过 Vue.use(xxx) 使用该组件。
  import {Button} from 'element-ui';
  import 'element-ui/lib/theme-chalk/index.css';
  Vue.use(Button)
  1. 安装 babel-plugin-component 插件,已达到减小项目体积的目的。
  npm install babel-plugin-component -D

如果使用了按需引入,则需要在 babel.config.js 中添加以下代码

cf0e5d7d865e49ba8a4c9dfd7a7c33be.png

  1. 通过终端键入 npm run build,可以发现全局引入和按需引入,生成的打包文件 dist 的大小差距很大。使用 按需引入,会 减少 项目的体积。
2. 配置使用路由
  1. 安装路由插件,终端键入如下代码。【注意 vue.js 对应 vue-router 的 3版本,要 vue-router@3,安装指定版本,否则会安装最新版本,导致错误】
  npm i vue-router@3
  1. 创建 router 文件夹,并在该文件夹创建 index.js 文件进行路由相关配置
  2. 48ebb2b8c04046f7b19d89269f84f784.png
  import Vue from "vue";
  import VueRouter from "vue-router";
  import Home from '../views/Home.vue'
  import User from '../views/User.vue'
  //全局引入VueRouter
  Vue.use(VueRouter);
  const routes = [
    {
      path: "/",
      name: "Home",
      component: Home, 
    },
    {
      path: '/user',
      name: 'User',
      component: User
    }
  ];
  // router用于接收VueRouter实例
  const router = new VueRouter({
    mode: "history",
    routes,
  });
  //默认暴露
  export default router;
  1. 创建 views 文件夹,在该文件夹下,创建 home 和 User 文件夹,在这两个文件夹下分别创建 index.vue
  2. fe5a654e35b3412f9e30e4df38abd065.png
  3. 4f0e2697c92b4767bb131746ee09f4e4.png
  4. 在 main.js 导入并使用路由
  import Vue from "vue";
  import App from "./App.vue";
  import router from '../router'
  new Vue({
    render: h => h(App),
    router
  }).$mount('#app')
  1. 在 App 组件相应位置显示内容
  <template>
    <div id="app">
      <router-view></router-view>
    </div>
  </template>

Ⅱ、搭建首页(头部 && 侧边栏

1. 头部 header 搭建
  1. 安装 less 插件(本项目的样式为 less)
  npm i less
  1. 安装插件 less 的解析器
  npm i less-loader@6.0.0
  1. 对 Main.vue 写入布局(el-xxx 是 Elementui 的书写格式)
    <el-container style="hight: 100%">
      <el-aside width="auto">Aside</el-aside>
      <el-container>
        <el-header>Header</el-header>
        <el-main>Main</el-main>
      </el-container>
    </el-container>
  1. 对 Main.vue 的 header 设置样式
  <style lang="less" scoped>
  .el-header{
    background-color: #333;
  }
  .el-main{
    padding: 0;
  }
  </style>
  1. 记得在 main.js 中按需引入
  import {Button, Radio, Container, Main, Header, Aside} from 'element-ui';
  Vue.use(Button)
  Vue.use(Radio)
  Vue.use(Container)
  Vue.use(Main)
  Vue.use(Header)
  Vue.use(Aside)

18236b23ce8d4b65baf6e0ac2cdbaed3.png

2. 左侧 aside 菜单栏搭建
  1. component(里面是公共文件) 文件夹下创建 CommonAside.vue,写入布局及样式。

7c10cd1942184021a9a7254c9871d25f.png

  <template>
    <el-menu
      default-active="1-4-1"
      class="el-menu-vertical-demo"
      @open="handleOpen"
      @close="handleClose"
      :collapse="isCollapse"
    >
      <el-submenu index="1">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span slot="title">导航一</span>
        </template>
        <el-menu-item-group>
          <span slot="title">分组一</span>
          <el-menu-item index="1-1">选项1</el-menu-item>
          <el-menu-item index="1-2">选项2</el-menu-item>
        </el-menu-item-group>
        <el-menu-item-group title="分组2">
          <el-menu-item index="1-3">选项3</el-menu-item>
        </el-menu-item-group>
        <el-submenu index="1-4">
          <span slot="title">选项4</span>
          <el-menu-item index="1-4-1">选项1</el-menu-item>
        </el-submenu>
      </el-submenu>
      <el-menu-item index="2">
        <i class="el-icon-menu"></i>
        <span slot="title">导航二</span>
      </el-menu-item>
      <el-menu-item index="3" disabled>
        <i class="el-icon-document"></i>
        <span slot="title">导航三</span>
      </el-menu-item>
      <el-menu-item index="4">
        <i class="el-icon-setting"></i>
        <span slot="title">导航四</span>
      </el-menu-item>
    </el-menu>
  </template>
  <script>
    export default {
      data() {
        return {
          isCollapse: true
        };
      },
      methods: {
        handleOpen(key, keyPath) {
          console.log(key, keyPath);
        },
        handleClose(key, keyPath) {
          console.log(key, keyPath);
        }
      }
    }
  </script>
  <style lang="less" scoped>
    .el-menu-vertical-demo:not(.el-menu--collapse) {
      width: 200px;
      min-height: 400px;
    }
  </style>
  1. 记得在 main.js 中按需引入
  2. 7ba7169c3c7647a5933e2f04084f9a2f.png
3. 一级菜单实现

【添加数据】

  1. 在 CommonAside.vue 的 data 中添加数据(用来做动态组件)
  menu: [
        {
          path: "/",
          name: "home",
          label: "首页",
          icon: "s-home",
          url: "Home/Home",
        },
        {
          path: "/mall",
          name: "mall",
          label: "商品管理",
          icon: "video-play",
          url: "MallManage/MallManage",
        },
        {
          path: "/user",
          name: "user",
          label: "用户管理",
          icon: "user",
          url: "UserManage/UserManage",
        },
        {
          label: "其他",
          icon: "location",
          children: [
            {
              path: "/page1",
              name: "page1",
              label: "页面1",
              icon: "setting",
              url: "Other/PageOne",
            },
            {
              path: "/page2",
              name: "page2",
              label: "页面2",
              icon: "setting",
              url: "Other/PageTwo",
            },
          ],
        },
      ]

【渲染组件(分为一级菜单和二级菜单)】

  1. 在计算属性 computed 中定义函数 noChildren(),过滤出没有子级的一级菜单
  noChildren() {
    //过滤出来没有子项目的数据
      return this.menu.filter((item) => !item.children);
    }
  1. v-for 遍历过滤出来的一级菜单,并在相应位置做出呈现
  <el-menu-item v-for="item in noChildren" :index="item.path" :key="item.path">
      <i :class="'el-icon-' + item.icon"></i>
      <span slot="title">{{item.label}}</span>
    </el-menu-item>

1c279774efac4e16bfa2eb4ee81d205b.png

4. 二级菜单实现
  1. 在计算属性 computed 中定义函数 hasChildren(),过滤出有子级的菜单
  hasChildren() {
    //过滤出来有子项目的数据
      return this.menu.filter((item) => item.children);
    }
  1. v-for 遍历过滤出来的二级菜单,并在相应位置做出呈现
  <el-submenu v-for="item in hasChildren" :index="item.path" :key="item.path">
      <template slot="title">
        <i :class="'el-icon-' + item.icon"></i>
        <span slot="title">{{item.label}}</span>
      </template>
      <!-- 二级菜单 -->
      <el-menu-item-group v-for="(subItem, subIndex) in item.children" :index="subIndex" :key="subItem.path">
        <el-menu-item >{{subItem.label}}</el-menu-item>
      </el-menu-item-group>
    </el-submenu>
5. menu 样式和路由跳转
  1. CommonAside.vue 中设置样式:对侧边栏进行样式设置
  background-color="#545c64"
    text-color="#fff"
    active-text-color="#ffd04b"
  ......
  .el-menu {
    height: 100vh;
    border: #fff;
    h3 {
      color: white;
      text-align: center;
      line-height: 48px;
    }
  }
  1. 路由配置:添加点击事件,进行路由的跳转
  <el-menu-item @click='clickMenu(item)'></el-menu-item>
  .......
  clickMenu(item) {
        this.$router.push({
            name: item.name
        })
    }

68203bea6990440d85000e9fd64af745.png

不积跬步无以至千里 不积小流无以成江海

相关文章
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
743 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
477 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
JavaScript
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
1118 49
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
这篇文章介绍了如何使用Ant Design Vue UI框架创建一个简单的后台管理模板,包括创建Vue项目、安装和使用ant-design-vue、以及编写后台管理通用页面的代码和样式。
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
|
JavaScript 前端开发 安全
[译] 在 Vue 组件中分离 UI 和业务逻辑。
[译] 在 Vue 组件中分离 UI 和业务逻辑。
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
1191 0
|
JavaScript
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
582 5
|
前端开发 JavaScript
零基础学 Vue + Element UI 第01步 —— 搭建开发环境、创建项目、修改默认模板、启动项目、访问项目
零基础学 Vue + Element UI 第01步 —— 搭建开发环境、创建项目、修改默认模板、启动项目、访问项目
338 1
|
JavaScript
vue + element UI【实战】音乐播放器/语音条(内含音频的加载、控制,事件监听,信息获取,手机网页阴影的去除等技巧)
vue + element UI【实战】音乐播放器/语音条(内含音频的加载、控制,事件监听,信息获取,手机网页阴影的去除等技巧)
821 1
|
前端开发 JavaScript
vue + element-UI 图片压缩canvas【详解】(含完整demo)
vue + element-UI 图片压缩canvas【详解】(含完整demo)
1031 1

热门文章

最新文章