1.iview/view-design介绍
iview是一款基于Vue.js的开源UI组件库,提供了丰富的组件和样式,支持响应式布局和多语言环境。它使用了最新的前端技术,如ES6、Webpack和SASS,让开发者可以快速构建高质量的Web应用程序。
View-design是一款基于Vue.js的开源UI组件库,它的设计理念是简单、易用、美观。它提供了众多的组件,如按钮、表单、弹窗、表格等,并且还支持多种主题和组件扩展,开发者可以根据自己的需求进行定制。
俩者之间主要的区别是vue的版本不同,这里以vue2为例实现代码
2.安装以及配置
2.1创建初始化项目
首先使用vue脚手架创建一个新的项目
确保电脑已通过npm安装vue脚手架
若没有安装可通过npm快算安装到电脑
npm p @vue/cli -g
vue create project
基础项目搭建完成后开始配置项目
2.2 下载view-design
进入项目目录执行命令
npm i view-design --save
--save表示放到生产环境依赖中,默认可不写
查看package.json可已看到多出来一个依赖
2.3vue引入并配置全局生效
在main.js中引入这几个文件
import iView from 'view-design'
import 'view-design/dist/styles/iview.css'
Vue.use(iView)
最后在组件中引入即可使用
3Form表单配置和校验规则
3.1表单的基本结构
<Form ref="form" :model="form" :rules="formRule" label-width="100">
<FormItem label="用户名" prop="username">
<Input v-model="form.username" placeholder="请输入用户名" clearable />
</FormItem>
<FormItem label="密码" prop="password">
<Input type="password" v-model="form.password" placeholder="请输入密码" :password="true" />
</FormItem>
<FormItem label="生日" prop="birthday">
<DatePicker v-model="form.birthday" aria-placeholder="生日"></DatePicker>
</FormItem>
<FormItem label="年龄" prop="age">
<Input type="number" v-model="form.age" placeholder="请输入年龄" />
</FormItem>
<FormItem label="性别" prop="sex">
<Select v-model="form.sex">
<Option :value="0">女</Option>
<Option :value="1">男</Option>
</Select>
</FormItem>
</Form>
<Row type="flex" justify="end">
<Col :span="10">
<Button @click="reset">重置</Button>
<Button @click="submit" type="primary">确定</Button>
</Col>
</Row>
3.2表单校验规则
3.2.1 默认表单校验规则
username: [{ required: true, message: "用户名不能为空", trigger: 'blur' }],
password: [{ required: true, message: "密码不能为空", trigger: 'blur' }, {
min: 6,
max: 12,
message: "长度在6-12之间"
}],
required: true 表示该字段必填 通常只能校验一般字符串,数字,不包括数组等
message: "用户名不能为空" 表示该字段校验不通过的提示信息
trigger: 'blur' 表示该字段的触发方式是失去焦点
3.2.2 自定义表单校验规则
birthday: [{
required: false,
validator: (rule, value, callback) => {
let today = new Date()
if (value > today) {
callback(new Error("出生年份不能比今天晚"))
} else {
callback()
}
}
}]
validator:(rule,value,callback)=>{}
如果校验通过则直接调用回调函数,不通过则返回一个错误对象
3.2.3 多表单校验规则
表单校验规则支持多个校验方式,本身是一个数组,可放多个校验规则
password: [
{ required: true, message: "密码不能为空", trigger: 'blur' },
{
min: 6,
max: 12,
message: "长度在6-12之间"
}],
3.2.4 表单校验方法
resetFields() 重置表单并清理错误显示
validate((validate)=>{}) 校验表单
/**
* 重置表单
*/
reset() {
this.$refs.form.resetFields()
},
/**
* 提交方法
*/
submit() {
this.$refs.form.validate(validate => {
if (validate) {
// todo: 调用表单接口
} else {
this.$Message.warning("请填写完整表单")
}
})
}
4案例代码
<template>
<div id="app">
<div>
<Card justify="center" style="width: 400px;align: center;">
<Form ref="form" :model="form" :rules="formRule" label-width="100">
<FormItem label="用户名" prop="username">
<Input v-model="form.username" placeholder="请输入用户名" clearable />
</FormItem>
<FormItem label="密码" prop="password">
<Input type="password" v-model="form.password" placeholder="请输入密码" :password="true" />
</FormItem>
<FormItem label="生日" prop="birthday">
<DatePicker v-model="form.birthday" aria-placeholder="生日"></DatePicker>
</FormItem>
<FormItem label="年龄" prop="age">
<Input type="number" v-model="form.age" placeholder="请输入年龄" />
</FormItem>
<FormItem label="性别" prop="sex">
<Select v-model="form.sex">
<Option :value="0">女</Option>
<Option :value="1">男</Option>
</Select>
</FormItem>
</Form>
<Row type="flex" justify="end">
<Col :span="10">
<Button @click="reset">重置</Button>
<Button @click="submit" type="primary">确定</Button>
</Col>
</Row>
</Card>
</div>
</div>
</template>
<script>
import { Card, DatePicker, FormItem, Input, Option, Select } from 'view-design';
export default {
name: 'App',
components: {
Card,
FormItem,
Input,
DatePicker,
Select,
Option
},
data() {
return {
form: {
username: "",
password: "",
birthday: "",
sex: 0,
age: 0
},
formRule: {
username: [{ required: true, message: "用户名不能为空", trigger: 'blur' }],
password: [
{ required: true, message: "密码不能为空", trigger: 'blur' },
{
min: 6,
max: 12,
message: "长度在6-12之间"
}],
birthday: [{
required: false,
validator: (rule, value, callback) => {
let today = new Date()
if (value > today) {
callback(new Error("出生年份不能比今天晚"))
} else {
callback()
}
}
}]
},
}
},
methods: {
/**
* 重置表单
*/
reset() {
this.$refs.form.resetFields()
},
/**
* 提交方法
*/
submit() {
this.$refs.form.validate(validate => {
if (validate) {
// todo: 调用表单接口
} else {
this.$Message.warning("请填写完整表单")
}
})
}
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
align-items: center;
}
</style>