入门指南:使用Element UI构建漂亮的Vue.js应用

news/2024/7/3 1:49:57

文章目录

    • 🍂引言
    • 🍂安装并引入Element UI
    • 🍂使用Element UI组件
    • 🍂更多常用组件
      • 🍁Button 按钮
      • 🍁Input 输入框
      • 🍁Radio 单选框
      • 🍁Checkbox 多选框
      • 🍁Select 选择器
      • 🍁Switch 开关
      • 🍁Slider 滑块
      • 🍁DatePicker 日期选择器
      • 🍁Table 表格
      • 🍁Pagination 分页
      • 🍁Dialog 对话框
      • 🍁Form 表单
      • 🍁Menu 菜单
      • 🍁Tabs 标签页
      • 🍁Tooltip 提示
      • 🍁Popover 弹出框
      • 🍁Message 消息提示
      • 🍁Notification 通知
      • 🍁Loading 加载
      • 🍁Carousel 走马灯
    • 🍂结语

🍂引言

Element UI是一个基于Vue.js的组件库,提供了一系列的可复用的UI组件,帮助开发者快速构建漂亮的用户界面。在本篇博客中,我们将逐步介绍如何开始使用Element UI,并展示一些常用的组件和功能。

🍂安装并引入Element UI

首先,我们需要安装Element UI库。可以通过npm或yarn来进行安装:

npm install element-ui

安装完成后,我们需要在Vue应用中引入Element UI库。在项目的入口文件(通常是 main.js 或类似的文件)中添加以下代码:

import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);
这段代码会将Element UI注册为Vue的插件,使其成为全局可用的组件。

🍂使用Element UI组件

现在我们已经成功引入了Element UI,我们可以开始使用其中的组件了。以下是一个示例,展示如何使用Element UI中的 el-button 组件:

<template>
  <div>
    <el-button type="primary">点击我</el-button>
  </div>
</template>

<script>
export default {
  // 组件的其他选项
}
</script>

在这个示例中,我们在Vue组件中使用了 el-button 组件,指定了按钮的类型,并在按钮内部添加了文本。

🍂更多常用组件

Element UI提供了众多常用的UI组件,例如表单、表格、对话框、菜单等。下面是一些常用组件的示例:

🍁Button 按钮


<template>
  <div>
    <el-button type="primary">Primary Button</el-button>
    <el-button type="success">Success Button</el-button>
    <el-button type="warning">Warning Button</el-button>
    <el-button type="danger">Danger Button</el-button>
  </div>
</template>

<script>
import { ElButton } from 'element-ui';

export default {
  components: {
    ElButton
  }
}
</script>

🍁Input 输入框

<el-input v-model="inputValue" placeholder="请输入内容"></el-input>

🍁Radio 单选框

<template>
  <div>
    <el-radio-group v-model="selected">
      <el-radio :label="1">选项1</el-radio>
      <el-radio :label="2">选项2</el-radio>
      <el-radio :label="3">选项3</el-radio>
    </el-radio-group>
  </div>
</template>

<script>
import { ElRadio, ElRadioGroup } from 'element-ui';

export default {
  data() {
    return {
      selected: 1
    };
  },
  components: {
    ElRadio,
    ElRadioGroup
  }
}
</script>

🍁Checkbox 多选框

<template>
  <div>
    <el-checkbox-group v-model="checked">
      <el-checkbox label="选项1">选项1</el-checkbox>
      <el-checkbox label="选项2">选项2</el-checkbox>
      <el-checkbox label="选项3">选项3</el-checkbox>
    </el-checkbox-group>
  </div>
</template>

<script>
import { ElCheckbox, ElCheckboxGroup } from 'element-ui';

export default {
  data() {
    return {
      checked: ['选项1']
    };
  },
  components: {
    ElCheckbox,
    ElCheckboxGroup
  }
}
</script>

🍁Select 选择器

<template>
  <div>
    <el-select v-model="selected" placeholder="请选择">
      <el-option
        v-for="option in options"
        :key="option.value"
        :label="option.label"
        :value="option.value"
      ></el-option>
    </el-select>
  </div>
</template>

<script>
import { ElSelect, ElOption } from 'element-ui';

export default {
  data() {
    return {
      selected: '',
      options: [
        { label: '选项1', value: 'option1' },
        { label: '选项2', value: 'option2' },
        { label: '选项3', value: 'option3' },
      ]
    };
  },
  components: {
    ElSelect,
    ElOption
  }
}
</script>

🍁Switch 开关

<template>
  <div>
    <el-switch v-model="switchValue" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭"></el-switch>
  </div>
</template>

<script>
import { ElSwitch } from 'element-ui';

export default {
  data() {
    return {
      switchValue: 1
    };
  },
  components: {
    ElSwitch
  }
}
</script>

🍁Slider 滑块

<template>
  <div>
    <el-slider v-model="sliderValue" :min="0" :max="100" show-input></el-slider>
    <span>{{sliderValue}}</span>
  </div>
</template>

<script>
import { ElSlider } from 'element-ui';

export default {
  data() {
    return {
      sliderValue: 50
    };
  },
  components: {
    ElSlider
  }
}
</script>

这个示例中使用了 组件来创建一个滑动条。通过 v-model 指令和 sliderValue 数据属性进行双向绑定,以便获取用户的选择值。此处的 sliderValue 属性的初始值为 50。我们使用 :min 和 :max 属性分别设置滑块的最小值和最大值为 0 和 100。同时,我们将 show-input 属性设置为 true,以显示一个数值输入框,允许用户手动输入数值。

在模板中我们将 sliderValue 属性绑定到 组件上,同时使用 v-model 指令使其支持双向数据绑定。我们还在组件外使用了一个 标签来显示用户当前选择的值。

🍁DatePicker 日期选择器

<template>
  <div>
    <el-date-picker v-model="dateValue" type="date" placeholder="选择日期"></el-date-picker>
  </div>
</template>

<script>
import { ElDatePicker } from 'element-ui';

export default {
  data() {
    return {
      dateValue: ''
    };
  },
  components: {
    ElDatePicker
  }
}
</script>

这个示例中使用了 组件来创建一个日期选择器。我们将 v-model 指令和 dateValue 数据属性进行双向绑定,以便获取用户选择的日期。

在 组件中,我们使用 type 属性来指定选择器的类型为日期选择器。我们还设置了 placeholder 属性来显示一个占位符文本,以提示用户选择日期。

🍁Table 表格

<template>
  <div>
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
      <el-table-column prop="gender" label="性别"></el-table-column>
    </el-table>
  </div>
</template>

<script>
import { ElTable, ElTableColumn } from 'element-ui';

export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 20, gender: '男' },
        { name: '李四', age: 25, gender: '女' },
        { name: '王五', age: 30, gender: '男' },
      ]
    };
  },
  components: {
    ElTable,
    ElTableColumn
  }
}
</script>

这个示例中使用了 组件来创建一个数据表格。我们使用 :data 属性来将数据绑定到表格中。这里的 tableData 数据数组包含了三个对象,每个对象表示表格中的一行数据。

在 组件中,我们使用 组件来创建列头。我们在每个 组件中使用 prop 属性来指定要显示的数据对象中的属性,使用 label 属性来指定表头的标题。例如,在第一个 组件中,我们指定要显示 name 属性的值,同时将列头标题设置为“姓名”。

🍁Pagination 分页

<template>
  <div>
    <el-pagination
      :total="total"
      :current-page="currentPage"
      :page-size="pageSize"
      @current-change="handleCurrentChange"
      layout="prev, pager, next"
    >
    </el-pagination>
  </div>
</template>

<script>
import { ElPagination } from 'element-ui';

export default {
  data() {
    return {
      total: 100, // 总记录数
      currentPage: 1, // 当前页码
      pageSize: 10 // 每页显示的记录数
    };
  },
  components: {
    ElPagination
  },
  methods: {
    handleCurrentChange(newPage) {
      // 处理页码改变的逻辑
      this.currentPage = newPage;
      // 从后端加载对应页码的数据
      this.loadData();
    },
    loadData() {
      // 请求后端接口加载数据
      // 根据 this.currentPage 和 this.pageSize 来获取相应页码的数据
    }
  }
};
</script>

这个示例中使用了 组件来创建一个分页器。我们使用 :total 属性指定总记录数,使用 :current-page 属性指定当前页码,使用 :page-size 属性指定每页显示的记录数。

在 组件中,我们使用 @current-change 事件监听页码改变的事件,并根据新的页码执行相应的逻辑。其中,我们在 handleCurrentChange 方法中更新 currentPage 的值,并调用 loadData 方法来加载对应页码的数据。

🍁Dialog 对话框

<template>
  <div>
    <el-button type="primary" @click="dialogVisible = true">打开弹窗</el-button>
    <el-dialog
      title="提示"
      :visible="dialogVisible"
      :before-close="handleClose"
      width="30%"
    >
      <span>确定要进行此操作吗?</span>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取消</el-button>
        <el-button type="primary" @click="handleSubmit">确定</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { ElButton, ElDialog } from 'element-ui';

export default {
  data() {
    return {
      dialogVisible: false // 控制弹窗的显示隐藏
    };
  },
  components: {
    ElButton,
    ElDialog
  },
  methods: {
    handleClose(done) {
      // 在关闭弹窗前执行一些逻辑
      if(confirm('确定要关闭弹窗吗?')) {
        done();
      }
    },
    handleSubmit() {
      // 执行操作的逻辑
      // 关闭弹窗
      this.dialogVisible = false;
    }
  }
};
</script>

🍁Form 表单

<template>
  <el-form :model="formData" :rules="formRules" ref="form" label-width="100px" class="demo-form">
    <el-form-item label="用户名" prop="username">
      <el-input v-model="formData.username"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
      <el-input type="password" v-model="formData.password"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button @click="resetForm">重置</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
import { ElForm, ElFormItem, ElInput, ElButton } from 'element-ui';

export default {
  data() {
    return {
      formData: {
        username: '',
        password: ''
      },
      formRules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' },
          { min: 6, max: 20, message: '密码长度为6至20个字符', trigger: 'blur' }
        ]
      }
    };
  },
  components: {
    ElForm,
    ElFormItem,
    ElInput,
    ElButton
  },
  methods: {
    submitForm() {
      this.$refs.form.validate(valid => {
        if (valid) {
          // 表单验证通过,执行提交逻辑
          console.log('表单提交成功');
        } else {
          // 表单验证不通过,做出相应处理
          console.log('表单提交失败');
          return false;
        }
      });
    },
    resetForm() {
      this.$refs.form.resetFields();
    }
  }
};
</script>

在这个示例中,我们使用 组件来创建一个表单,并使用 :model 属性将表单数据绑定到 formData 对象上。使用 :rules 属性来设置表单验证规则,label-width 属性来设置标签的宽度。

在 组件中,我们使用 组件来创建表单项。每个表单项包含一个标签和相应的控件,我们使用 label 属性来设置标签的文本,prop 属性来指定对应的数据字段。在本例中,分别创建了一个用户名(username)和密码(password)的表单项,我们使用 组件作为输入控件,并使用 v-model 来与 formData 对象中的相应字段进行双向绑定。

🍁Menu 菜单

<template>
  <el-menu :default-active="$route.path" class="demo-menu" router>
    <el-submenu index="1">
      <template slot="title">
        <i class="el-icon-location"></i>
        <span>导航一</span>
      </template>
      <el-menu-item index="/home">首页</el-menu-item>
      <el-menu-item index="/about">关于我们</el-menu-item>
    </el-submenu>
    <el-submenu index="2">
      <template slot="title">
        <i class="el-icon-menu"></i>
        <span>导航二</span>
      </template>
      <el-menu-item index="/products">产品</el-menu-item>
      <el-menu-item index="/services">服务</el-menu-item>
    </el-submenu>
    <el-menu-item index="/contact">
      <i class="el-icon-phone"></i>
      <span>联系我们</span>
    </el-menu-item>
  </el-menu>
</template>

<script>
import { ElMenu, ElSubmenu, ElMenuItem } from 'element-ui';

export default {
  components: {
    ElMenu,
    ElSubmenu,
    ElMenuItem
  }
};
</script>

<style scoped>
.demo-menu {
  height: 100%;
}
</style>

🍁Tabs 标签页

<template>
  <el-tabs v-model="activeTab" @tab-click="handleTabClick">
    <el-tab-pane label="标签一" name="tab1">
      <p>标签一的内容...</p>
    </el-tab-pane>
    <el-tab-pane label="标签二" name="tab2">
      <p>标签二的内容...</p>
    </el-tab-pane>
    <el-tab-pane label="标签三" name="tab3">
      <p>标签三的内容...</p>
    </el-tab-pane>
  </el-tabs>
</template>

<script>
import { ElTabs, ElTabPane } from 'element-ui';

export default {
  components: {
    ElTabs,
    ElTabPane
  },
  data() {
    return {
      activeTab: 'tab1'
    };
  },
  methods: {
    handleTabClick(tab) {
      console.log('点击了标签', tab.name);
    }
  }
};
</script>

🍁Tooltip 提示

<template>
  <div class="container">
    <el-tooltip content="这是一个提示信息" placement="top-start">
      <span>悬停在我上面显示提示</span>
    </el-tooltip>
  </div>
</template>

<script>
import { ElTooltip } from 'element-ui';

export default {
  components: {
    ElTooltip
  }
};
</script>

<style scoped>
.container {
  width: 100%;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

🍁Popover 弹出框

<template>
  <div class="container">
    <el-popover
      trigger="hover"
      placement="top"
      title="提示标题"
      content="这是一个弹出框内容">
      <button>悬停在我上面显示弹出框</button>
    </el-popover>
  </div>
</template>

<script>
import { ElPopover } from 'element-ui';

export default {
  components: {
    ElPopover
  }
};
</script>

<style scoped>
.container {
  width: 100%;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

🍁Message 消息提示

// 在 Vue 组件中的某个方法中使用 $message 方法
methods: {
  showMessage() {
    this.$message({
      message: '这是一条消息提示',
      type: 'success'
    });
  }
}

🍁Notification 通知

// 在 Vue 组件中的某个方法中使用 $notify 方法
methods: {
  showNotification() {
    this.$notify({
      title: '重要通知',
      message: '您的账户余额已不足,请尽快充值!',
      type: 'warning',
      duration: 6000
    });
  }
}

🍁Loading 加载

// 在 Vue 组件中的某个方法中使用 $loading 方法
methods: {
  startLoading() {
    this.$loading({
      text: '加载中...',
      spinner: 'el-icon-loading',
      background: 'rgba(0, 0, 0, 0.7)'
    });
  },
  endLoading() {
    this.$loading().close();
  }
}

🍁Carousel 走马灯

<template>
  <el-carousel :interval="3000">
    <el-carousel-item v-for="item in carouselItems" :key="item.id">
      <img :src="item.imageUrl" alt="carousel-item">
    </el-carousel-item>
  </el-carousel>
</template>

<script>
export default {
  data() {
    return {
      carouselItems: [
        { id: 1, imageUrl: 'path-to-image-1' },
        { id: 2, imageUrl: 'path-to-image-2' },
        { id: 3, imageUrl: 'path-to-image-3' }
      ]
    };
  }
};
</script>

这只是Element UI提供的一小部分组件,更多组件请参考Element UI官方文档。

🍂结语

在本篇博客中,我们简要了解了如何开始使用Element UI,并展示了其中一些常用的组件和功能。Element UI不仅提供了现成的UI组件,还支持可自定义主题和扩展,为开发者提供了更灵活的选择。


🏫博客主页:魔王-T

🥝大鹏一日同风起 扶摇直上九万里

❤️感谢大家点赞👍收藏⭐评论✍️



http://lihuaxi.xjx100.cn/news/1863649.html

相关文章

大模型技术的发展与实践

一、大模型的概念 大型语言模型&#xff0c;也称大语言模型、大模型&#xff08;Large Language Model&#xff0c;LLM&#xff1b;Large Language Models&#xff0c;LLMs) 。 大语言模型是一种深度学习模型&#xff0c;特别是属于自然语言处理&#xff08;NLP&#xff09;的…

什么是Overlay网络?Overlay网络与Underlay网络有什么区别?

你们好&#xff0c;我的网工朋友。 在传统历史阶段&#xff0c;数据中心的网络是以三层架构&#xff08;核心、汇聚、接入&#xff09;为基本标准。 但是随着技术的发展&#xff0c;不同的厂家有不同的组建方式&#xff0c;比如说在核心层、汇聚层和接入层增加虚拟化技术。 …

python之ddddocr快速识别

1. 安装模块 pip install ddddocr -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com2. 编写代码 import ddddocr # 导入orc模块 import logging # 导入日志 logging.getLogger().setLevel(logging.INFO) # 设置日志级别 def ComputeCode(path):try:logg…

双目测宽仪高质量生产利器

双目测宽仪是基于机器视觉原理及模拟人的双眼进行宽度尺寸自动测量的仪器&#xff0c;是一种高度自动化的工业实时在线宽度检测仪表。 双目测宽仪是一种智能化的全自动工业在线实时宽度检测设备&#xff0c;两个工业相机就像人的双眼&#xff0c;可以形成立体视觉&#xff0c…

在python中自己定义一个方法,但是没有写return XXX会有什么影响

【多么痛的领悟&#xff0c;找了两个小时的错误&#xff01;&#xff01;&#xff01;发现是少写个return】 print(data.task_ID) AttributeError: NoneType object has no attribute task_ID** 然后一句一句找&#xff0c;我找啊找&#xff01;&#xff01;&#xff01;&…

layui学习笔记

中文网1: https://www.layui1.com/doc/index.html 中文网2: https://layui.dev/docs/2/ 中文网3&#xff1a; https://www.ilayuis.com/demo/index.htm laye弹出层: https://blog.csdn.net/qq_61313896/article/details/132901112 laye弹出层: https://blog.csdn.net/gybs…

12.2旋转,SPLAY树的各种操作(SPLAY与AVL是两种BST)

Splay树和AVL树是两种不同的自平衡二叉搜索树实现。 1. 平衡条件&#xff1a;AVL树通过维护每个节点的平衡因子&#xff08;左子树高度减去右子树高度&#xff09;来保持平衡&#xff0c;要求每个节点的平衡因子的绝对值不超过1。Splay树则通过经过每次操作后将最近访问的节点…

黑猫带你学eMMC协议第31篇:什么是eMMC的驱动强度(Drive Strength)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创侵权保护,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 简介 首先要清楚: 内阻越大,驱动强度越小;内阻越小,驱动强度越大。 ECSD[185]可调节…