快速上手,ElementUI

588 阅读7分钟

了解常见组件库及使用流程

前端项目分类

移动端(h5页, 小程序)

PC端

常见的vue技术栈组件库

组件库的基本使用流程

  1. 根据项目的实际情况,进行技术选型: 用什么技术栈,用什么组件库
  2. 去对应的官方查文档
  3. 遇到困难时
    1. 在官网上找 常见问题(一般在网页的最底部)
      下图是element官网上的截图

image (2).png

    1. 在社区/搜索引擎 找答案
    2. 去提issue  ,面对面直接向组件的作者提问
    3. 改源码

小结

  • vue技术栈有很多的组件库(一般大厂才会维护组件库)
  • 组件库要分移动端和PC端
  • 学习组件库的基本方法是查文档,遇到困难时提 issue

创建项目并引入element组件库

Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库

官方地址:element.eleme.cn/#/zh-CN

ElementPlus(适配Vue3.0的版本)官方地址: element-plus.org/#/zh-CN

使用流程

用vue-cli脚手架工具创建项目,并在项目中引入elementUI组件库

思路

用vue create 命令创建项目;根据elementUI官网中的说明来安装和使用组件

用vue-cli创建vue项目

vue create

找一个合适的文件夹,打开cmd窗口,用vue create 创建项目

vue create element-demo
-------------------------------
? Please pick a preset:
> Default ([Vue 2] babel, eslint)
  Default (Vue 3 Preview) ([Vue 3] babel, eslint)
  Manually select features

注意:

  1. vue create 命令会自动创建文件夹,这样就不需要我们手动创建了
  2. 选择Vue2 版本的默认配置
  3. 如果vue create 命令不能正常运行,要先安装脚手架工具, 对应的命令是: npm i -g @vue/cli

把ElementUI添加到项目中

参考官网文档,按全局引入的方式,一共分成两步:

  1. 安装 elementUI
  2. 在项目的main.js中引入使用

在项目中安装elementUI

npm i element-ui -S

-S: 是--save的简写,表示 这个包是生产依赖, 表示项目上线也要使用这个包。

-S: 是可以省略不写的。

如果要安装开发依赖,则要加 -D。

main.js中引入并注册

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)

上面的写法是固定模式,可随时去官网查看。

使用elementUI组件

使用组件的基本思路是:在官网上进行 cv操作。这里找一个最简单的button组件进行尝试使用。

app.vue

<template>
  <div id="app">
    <el-button>默认按钮</el-button>
    <el-button type="primary">主要按钮</el-button>
    <el-button type="success">成功按钮</el-button>
    <el-button type="info">信息按钮</el-button>
    <el-button type="warning">警告按钮</el-button>
    <el-button type="danger">危险按钮</el-button>
  </div>
</template>

注意:

  1. 组件名前面有el这个关键字
  2. type属性决定了按钮的样式风格

效果预览

如果打开浏览器预览,没有效果,那么一切ok~

小结

  1. elementui是做PC项目的首选
  2. 组件库一般都会有配套使用教程,基本套路是:
    1. npm i 安装
    2. 在main.js中导入,并使用

table组件-基础使用

用表格来显示数据,是一PC后台管理系统中一个非常常见的需求。

目标

能通过分析官网中的代码,把表格数据(文本数据)展示出来

思路

从官网上cv代码到项目中 ;

学习相关属性的使用;

基础demo

复制官方demo中的第一个基础demo,先把我们的组件跑起来运行

<template>
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="date" label="日期" width="180"> </el-table-column>
      <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
      <el-table-column prop="address" label="地址"> </el-table-column>
    </el-table>
</template>
<script>
export default {
  data() {
    return {
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 弄'
      }]
    }
  }
}
</script>

学习组件的使用

数据源由table组件的data属性来指定(不需要我们自己用v-for指令来循环)

  1. 行(data),决定表格的数据。它是数组,数组中的每一个元素是一个对象,表示一行。
  2. 列,决定表格结构。 列由el-table-column决定,下面有三个属性需要掌握
    • label:决定当前列显示出的标题
    • prop:决定当前列数据的来源。对于表格来说, 它的数据是一个数组,每一个元素是一个对象,这里的prop值就是这个对象中的属性名

prop="date"。 这里的prop就是用来从每一个对象中取出属性名为date的 属性值。

    • width: 用来设置列的宽度。如果不设置,它会自适应。

小结

在el-table使用data属性

在el-table-item上使用prop属性

table组件-自定义列-插槽

场景

有时候我们的表格单元格中,不光想要渲染文本,可能会渲染一些自定义的内容:  图片,操作按钮

目标

掌握自定义列的用法,能在表格单元格中显示自定义的内容。

需求描述:我们想在最后一列渲染出一个删除按钮

思路

官网:自定义列模板

代码

我们需要在对应的列中,使用template标签包裹我们自定义渲染的内容,其实用的就是插槽的机制

// 省略其它....
<el-table-column label="操作" width="100">
    <template>
      <el-button size="small" type="danger">删除</el-button>
    </template>
</el-table-column>

小结

要自定义内容:

  1. 删除prop属性
  2. 插槽

table组件-自定义列-作用域插槽

需求说明

后端返回的数据中,只有一个指代性别的编码,为了方便用户查看,需要我们把1转换成男,0转换成女。

tableData: [{
       date: '2016-05-02',
       name: '王小虎',
       address: '上海市普陀区金沙江路 1518 弄',
  		 gender: 0
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 弄',
        gender: 1
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 弄',
        gender: 1
      }]

解决思路

用作用域插槽拿到数据(官网),再使用函数做转换输出即可

     <el-table-column
        prop="date"
        label="日期"
        width="180">
      </el-table-column>

      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>

       <el-table-column
        label="性别"
        width="180">
        <template v-slot="scope">
        //1.slot-scope是固定写法
        //2.scope理解为变量,并不一定需要固定这个名字,el-table-column组件会自动将渲染本行需要的数据传给scope,其中它对应数据源中的某个对象,这里的row是固定写法。
            {{scope.row.gender ? '女' : '男' }}
        </template>
      </el-table-column>

      <el-table-column
        prop="age"
        label="年龄"
        width="180">
      </el-table-column>

      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>

通过 Scoped slot 可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据

小结

  1. 场景:直接使用prop只能渲染文本,通过prop不能直接渲染的时,我们需要自定义内容渲染
  2. 机制:作用域插槽

table组件-自定义列-显示图片(练习)

目标

把图片显示在表格中
数据

tableData: [{
   companyName: '小米',
   companyLogo: 'http://s02.mifile.cn/assets/static/image/logo-mi2.png'
 }, 
 {
    companyName: '京东',
    companyLogo: 'https://misc.360buyimg.com/lib/img/e/logo-201305-b.png'
  }, 
  {
    companyName: '百度',
    companyLogo: 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'
  }
]
 <el-table-column
        label="图片" align=center>
        //slot-scope:是老语法,
        //v-slot:是新语法。效果一样
        <template slot-scope="scope">
            <img :src="scope.row.companyLogo" alt="">
        </template>
      </el-table-column>

pagination-翻页组件

分页组件的官网地址:element.eleme.io/#/zh-CN/com…

基础语法:

<el-pagination 
  layout="prev, pager, next" 
  :total="1000">
</el-pagination>

说明:

  • layout中的关键字有自己的含义;
  • total用来设置数据的总条数

每页条数

page-size:默认每页10条数据

翻页事件

当用户点击页面进行翻页时就会触发current-change 事件

<template>
  <el-pagination
      background
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage3"
      :page-sizes="[1, 7, 20, 100]"
      :page-size="100"
      layout="total, sizes, prev, pager, next, jumper"
      :total="400">
    </el-pagination>
</template>

<script>
 export default {
    methods: {
      handleSizeChange(val) {
        console.log(`每页 ${val} 条`);
      },
      handleCurrentChange(val) {
        console.log(`当前页: ${val}`);
      }
    },
    data() {
      return {
        currentPage1: 5,
        currentPage2: 5,
        currentPage3: 5,
        currentPage4: 4
      };
    }
  }
</script>

效果如下图:

Snipaste_2022-05-14_20-14-00.png

注意:

  1. 事件名不是驼峰命名法,而是采用kebab-case(昵称:烤串命名法)
  2. 它会自动接收页码

小结

  1. 翻页按钮的结构 :layout 按照我们传入的结构顺序依次渲染
  2. 分页逻辑:总页数 = 总条数(:total) / 每页的条数(:page-size)
  3. 事件: @current-change
  4. 翻页组件一般和表格一起使用,但是,它并不决定表格的数据来源。

Form表单组件-基本使用

在官网上cv一个最复杂的例子,然后对应做修改

用户登录表单,双向绑定:

<template>
  <div class="form-container">
    <el-form label-width="80px">
      <el-form-item label="手机号">
        <el-input v-model="form.mobile"></el-input>
      </el-form-item>
      <el-form-item label="密码">
        <el-input v-model="form.code"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit">立即创建</el-button>
        <el-button>取消</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      form: {
        mobile: '',
        code: ''
      }
    }
  },
  methods: {
    onSubmit() {
      console.log('submit!')
    }
  }
}
</script>

<style scoped>
  .form-container{
    width: 600px;
  }
</style>

小结

  • 表单中的数据项一般会用一个对象包起来
  • 属性名一般和后端接口中保持一致
  • 在元素上采用v-model双向绑定

Form表单校验-基本介绍

目标

了解表单校验的必要性和实现方式

校验必要性

在向后端发请求调用接口之前,我们需要对所要传递的参数进行验证,来把用户的错误扼杀在摇篮之中。

不能相信用户的任何输入!不能相信用户的任何输入!不能相信用户的任何输入!

校验内容

  • 内容不能为空(*)
  • 密码长度必须多少位
  • 手机号的格式要合规
  • 邮箱的格式要合规
  • ...

校验方式

  • 不依赖于任何组件的验证
    • 在做提交之前,自己把数据分析处理一下。
  • 基于具体组件的验证(不同的组件库,它的验证方式可能也各有不同)

小结

  • 表单内容一定要验证(不能相信用户的任何输入!);
  • 如果使用是组件库中的表单,最好是采用它们自带的验证方式

Form表单组件-表单验证

场景

在上面的表单中,要求:用户名必填

目标

掌握element-ui中表单校验的使用

基本步骤-共三步

  1. 定义验证规则。data()中按格式定义规则
  2. 在模板上做属性配置来应用规则(三个配置)
    给表单设置 rules 属性传入验证规则
    给表单设置model属性传入表单数据
    给表单项(Form-Item )设置 prop 属性,其值为设置为需校验的字段名
  3. 手动兜底验证

步骤1-定义表单验证规则

在 data 中,补充定义规则。

格式:

<script>
  export default {
    data() {
      return {
        form: {
          username: '',
          password:'',
        },
        rules:{
          username:[
            { required: true, message: '请输入用户名', trigger: 'blur' },
            { pattern: /^\d{6}$/, message: '请输入合法的用户名', trigger: 'blur' },
            { min: 6, max: 8, message: '长度为6-8位', trigger: 'blur' }
          ],
          password:[
            { required: true, message: '请输入密码', trigger: 'blur' },
            { min: 6, max: 8, message: '长度为6-8位', trigger: 'blur' },
            {
             //Form表单组件-表单验证-自定义检验规则
             
              validator(_, value, callback){
              	  // rule:采用的规则
                  // value: 被校验的值
                  // callback是回调函数, 
                  //      如果通过了规则检验,就直接调用callback()
                  //      如果没有通过规则检验,就调用callback(错误对象,在错误对象中说明原因)
        	//         例如:callback(new Error('错误说明'))
                if(value === '123456'){
                  callback(new Error('密码不能为123456'))
                }else{
                  callback()
                }
              },
              trigger:'blur'
            }
          ]
        }
      }
    },
    methods: {
      onSubmit() {
      //  console.log(this.$refs.form)
      this.$refs.form.validate(valid=>{
        console.log(valid);
      })
      }
    }
  }
</script>

注意:

  • rules中的属性名与表单数据项中的属性名必须是一致的。

步骤2-模板中的配置

内容:

  1. 给 el-form 组件绑定 model 为表单数据对象
  2. 给 el-form 组件绑定 rules 属性配置验证规则
  3. 给需要验证的表单项 el-form-item 绑定 prop 属性,注意:prop 属性需要指定表单对象中的数据名称
<template>
    <div style="width:400px;">
      <el-form ref="form" :model="form" :rules="rules"   label-width="80px">
            <el-form-item label="用户名" prop="username">
              <el-input type="text"  v-model="form.username"></el-input>
            </el-form-item>

            <el-form-item label="密码" prop="password">
              <el-input type="password"  v-model="form.password"></el-input>
            </el-form-item>

            <el-form-item>
              <el-button type="primary" @click="onSubmit">登录</el-button>
            </el-form-item>
      </el-form>
    </div>
</template>

验收效果

我们做到这一步时,当用户输入的内容不符合表单规则要求时,并且某个输入框失焦时,它会给出相应的提示,当我们输入的内容符合要求时,错误提示会自动消失。

步骤3-手动兜底验证

格式

 methods: {
      onSubmit() {
      //  console.log(this.$refs.form)
      this.$refs.form.validate(valid=>{
        console.log(valid);
      })
      }
    }
element-ui的表单组件.validate(valid => {
	if(valid) {
	   // 通过了验证
	} else {
		 // 验证失败
	}
})

说明:

  • validate 方法是表单组件自带的,用来对表单内容进行检验。
  • 需要在模板中添加对表单组件的引用:ref 的作用主要用来获取表单组件手动触发验证

代码-模板:

<el-form label-width="80px" 
    ref="form"
   :model="form"
   :rules="rules">

添加ref来引用el-form组件。

代码

在做提交时进行手动兜底验证,如果通过了验证

doLogin () {
  alert('我可以做登录了')
},
submit () {
  this.$refs.form.validate(valid => {
    // valid 就是表单验证的结果,如果是true,表示通过了
    // console.log(valid)
    if (valid) {
      // 通过了验证,你可以做后续动作了
      this.doLogin()
    }
  })
}

小结

步骤

  1. 定义验证规则(按element-ui的要求来)
  2. 配置模板,应用规则
    给表单设置 rules 属性传入验证规
    给表单设置model属性传入表单数据
    给表单中的元素(Form-Item )设置 prop 属性,其值为设置为需校验的字段名
  3. 手动兜底验证

简单介绍到此!! 其他组件可参考官网文档学习