elementUI

755 阅读2分钟

element的官方文档

官网地址 : [element-ui](Element - 网站快速成型工具)

我们使用组件库尽量选取大公司大品牌的组件库,安全有保证.能白嫖只管白嫖就完事了

安装

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

注意:

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

cd 项目名再启动

上一步的命令做了两件事:创建文件夹,把示例项目的代码下载到这个文件夹中,为了运行项目,我们还需要进入项目目录下,并运行命令。 对应的命令是:

cd element-demo # 进入项目目录
npm run serve # 运行命令

在浏览器上面输入

<http://localhost:8080>

查看效果

把ElementUI添加到项目中

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

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

在项目中安装elementUI

npm i element-ui -S

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

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

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

main.js中引入并注册

完整引入

import Vue from 'vue';
import ElementUI from 'element-ui'; 
import 'element-ui/lib/theme-chalk/index.css'; 
import App from './App.vue'; Vue.use(ElementUI); 
new Vue({ el: '#app', render: h => h(App) });

直接在官网搬运的,引入后就可以在任意组件里使用elementUI

复制粘贴就不讲了,说一些有意思的

table里面的自定义插槽

当后台传过来的性别数据不是男和女,而是0和1时我们改怎么处理

第一个办法就是打后端一顿,让他给我改过来1

第二个方法就只能靠我们自己了

<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="age" label="年龄"> </el-table-column>
    <el-table-column prop="address" label="地址" align="center">
    </el-table-column>
    <el-table-column prop="gender" label="性别">
    
    //v-slot和 slot-scope效果一样,可以获取到自定义列的内容,参数为 { row, column, $index }的数据
      <template slot-scope="scope">
        <!-- <span>{{fn(scope.row.gender)}}</span> -->
        <span>{{ scope.row.gender ? "男" : "女" }}</span>
      </template>
    </el-table-column>

    <el-table-column prop="img" label="图片">
      <template slot-scope="scope">
        <img :src="scope.row.companyLogo" alt="" />
      </template>
    </el-table-column>
    
    <el-table-column label="操作">
      <el-button size="mini" type="primary" icon="el-icon-search">搜索</el-button>
  </el-table>
</template>

  <script>
export default {
  data() {
    return {
      tableData: [{
        date: '2016-05-02',
        name: '黑小虎',
        address: '上海市普陀区金沙江路 1518 弄',
        age: 22,
        gender: 0,
        companyLogo: 'http://s02.mifile.cn/assets/static/image/logo-mi2.png'

      }, {
        date: '2016-05-04',
        name: '沸羊羊',
        address: '上海市普陀区金沙江路 1517 弄',
        age: 21,
        gender: 1,
        companyLogo: 'http://s02.mifile.cn/assets/static/image/logo-mi2.png'
      }, {
        date: '2016-05-01',
        name: '双面龟',
        address: '上海市普陀区金沙江路 1519 弄',
        age: 23,
        gender: 0,
        companyLogo: 'http://s02.mifile.cn/assets/static/image/logo-mi2.png'
      }, {
        date: '2016-05-03',
        name: '汤姆',
        address: '上海市普陀区金沙江路 1516 弄',
        age: 25,
        gender: 1,
        companyLogo: 'http://s02.mifile.cn/assets/static/image/logo-mi2.png'
      }]
    }
  },
  methods: {
    fn(scope) {
      console.log(scope);
    }
  }
}
  </script>

form表单验证

校验必要性

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

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

基本步骤-共三步

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

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

在 data 中,补充定义规则。

data() {
  return {
    rules: {
        // 字段名1:表示要验证的属性
        // 值: 表示验证规则列表。它是一个数组,数组中的每一项表示一条规则。
        //     数组中的多条规则会按顺序进行
        字段名1: [
          { 验证规则1 },
          { 验证规则2 },
        ],
        字段名2: [
          { 验证规则1 },
          { 验证规则2 },
        ], 
		}
  }
}

验证规则示例


  { required: true, message: '请输入验证码', trigger: 'blur' },
  { pattern: /^\d{6}$/, message: '请输入合法的验证码', trigger: 'blur' },
  { min: 6, max: 8, message: '长度为6-8位', trigger: 'blur' }

实操代码

data () {
    return {
      // 表单验证规则,整体是一个对象
      // 键:要验证的字段, 值:是一个数组,每一项就是一条规则
      
      rules: {
        // 字段名:mobile就表示要验证的 属性
        // 值: 是一个数组。数组中的每一项表示一条规则。
        mobile: [
          { required: true, message: '请输入手机号', trigger: 'blur' },
          { pattern: /^\d{11}$/, message: '请输入11位手机号', trigger: 'blur' }
        ]
      }
    }
  },

步骤2-模板中的配置

内容:

  1. 给 el-form 组件绑定 model 为表单数据对象
  2. 给 el-form 组件绑定 rules 属性配置验证规则
  3. 给需要验证的表单项 el-form-item 绑定 prop 属性,注意:prop 属性需要指定表单对象中的数据名称

代码:

<el-form label-width="80px" :model="form" :rules="rules">
  <el-form-item label="手机号" prop="mobile">
    <el-input v-model="form.mobile"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="code">
    <el-input v-model="form.code"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="onSubmit">立即创建</el-button>
    <el-button @click="onCancel">取消</el-button>
  </el-form-item>
</el-form>

验收效果

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

步骤3-手动兜底验证

格式

element-ui的表单组件.validate(valid => {
	if(valid) {
	   // 通过了验证
	} else {
		 // 验证失败
	}
})

element-ui的表单组件.validate(valid => {})只要写了就有效,就会判断

全部加一起写一个小demo

<template>
  <div style="width:800px">
    <h1>表单</h1>
    <el-form
    ref="form"
    :rules="rules"
    :model="form"
    label-width="80px">
      <el-form-item label="用户名" prop="username">
        <el-input 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>

<script>
  export default {
    data() {
      return {
        form: {
          username: '',
          password: ''
        },
        // 定义规则
        rules: {
          "username": [
            {required: true, message: '请输入用户名', trigger: 'blur'}
          ],
          "password":[
            { required: true, message: '请输入密码', trigger: 'blur' },
            { min: 6, max: 8, message: '长度为6-8位', trigger: 'blur' },
            //自定义的规则
            { 
              validator(_, value, callback){
                // rule:采用的规则
                // value: 被校验的值
                // callback是回调函数, 
                //      如果通过了规则检验,就直接调用callback()
                //      如果没有通过规则检验,就调用callback(错误对象,在错误对象中说明原因)
                //         例如:callback(new Error('错误说明'))
                if(value === '123456'){
                  callback(new Error('密码不能为123456'))
                } else{
                  callback()
                }
                // console.log(rule, value, callback)
              }, 
              trigger:"blur"
            }
          ]
        }
      }
    },
    methods: {
      onSubmit() {
        // 手动兜底校验
        console.log(this.$refs.form)
        // this.$refs.form.validate会让表单自动校验一次
        // valid就会自动接收校验的结果
        this.$refs.form.validate(valid => {
          console.log(valid)
          // valid: true,false
          // 为false: 表单上会有提示信息
          // 如果是true,就可以进一步发ajax做登录
        })

        // if(this.form.name ===""){
        //   alert('不能为空')
        //   return
        // }
        // if(this.form.name === 'admin'){
        //   alert('不能取这个名字')
        //   return 
        // }
        // console.log('submit!');
      }
    }
  }
</script>

注意

下面三个地方的属性名必须一致

image.png