vue+element 表单封成组件(2)
今天我们继续把时间选择器,多选框和单选框加上
父组件(在昨天的基础上增加):
<template>
<el-form :model="ruleForm" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<commonformtext
prop="biao"
placeholder="这个是测试的"
label="活动区域"
v-model="ruleForm.biao"
:rules="[{ required: true, message: '请输入活动名称', trigger: 'blur' }]"
>
</commonformtext>
<commonformselect
prop="select"
placeholder="这个是测试的下拉框"
label="下拉框"
v-model="ruleForm.select"
:rules="{ required: true, message: '请选择活动区域', trigger: 'change' }"
:selectdata='selectdata'
>
</commonformselect>
<commonformtimeb>
<template slot="date">
<commonformdate
v-model="ruleForm.date1"
placeholder="请选择日期"
prop="date1"
:rules="{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }"
>
</commonformdate>
<el-col class="line" :span="0.5">--</el-col>
<commonformtime
v-model="ruleForm.date2"
placeholder="请选择时间"
prop="date2"
:rules="{ type: 'date', required: true, message: '请选择时间', trigger: 'change' }"
>
</commonformtime>
</template>
</commonformtimeb>
<commonformcheckbox
prop="type"
label="活动性质"
v-model="ruleForm.type"
:rules=" { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }"
:checkboxdata='checkboxdata'
>
</commonformcheckbox>
<commonformradio
prop="radio"
label="活动性质"
v-model="ruleForm.radio"
:rules=" { required: true, message: '请选择活动资源', trigger: 'change' }"
:radiodata='radiodata'
>
</commonformradio>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
</el-form-item>
</el-form> </template>
<script>
import commonformtext from "@/components/common/formtext.vue";
import commonformselect from "@/components/common/formselect.vue";
import commonformtime from "@/components/common/formtime.vue";
import commonformtimeb from "@/components/common/formtimeb.vue";
import commonformdate from "@/components/common/formdate.vue";
import commonformcheckbox from "@/components/common/formcheckbox.vue";
import commonformradio from "@/components/common/formradio.vue";
export default {
data() {
return {
ruleForm: {
date1: "",
date2: "",
biao: "",
type: new Array(),
select: "",
radio: ""
},
selectdata: [
{ label: "区域1", value: "1", id: 1 },
{ label: "区域2", value: "2", id: 2 },
{ label: "区域3", value: "3", id: 3 },
{ label: "区域4", value: "4", id: 4 },
{ label: "区域5", value: "5", id: 5 }
],
checkboxdata: [
{ label: "美食/餐厅线上活动", value: "1", id: 1 },
{ label: "地推活动", value: "2", id: 2 },
{ label: "线下主题活动", value: "3", id: 3 },
{ label: "单纯品牌曝光", value: "4", id: 4 }
],
radiodata: [
{ label: "线上品牌商赞助", value: "1", id: 1 },
{ label: "线下场地免费", value: "2", id: 2 },
{ label: "线下主题活动", value: "3", id: 3 }
]
};
},
components: {
commonformtext,
commonformselect,
commonformtime,
commonformtimeb,
commonformdate,
commonformcheckbox,
commonformradio
},
methods: {
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
alert("submit!");
} else {
console.log("error submit!!");
return false;
}
});
}
}
};
</script>
时间选择器(一共两个,都差不多只粘一个了)
<template>
<el-col :span="11">
<el-form-item :prop="prop" :rules="rules" >
<el-date-picker type="date" :placeholder="placeholder" v-model="myValue" style="width: 100%;"></el-date-picker>
</el-form-item>
</el-col>
</template>
<script>
export default {
props: {
type: {
type: Array
},
prop: {
type: String
},
placeholder: {
type: String
},
label: {
type: String
},
value: [String, Number, Date],
rules: [Object, Array],
name: {
type: String
}
},
data() {
return {
myValue: ""
};
},
mounted() {
this.myValue = this.value;
},
watch:{
myValue(val){
this.$emit("input", this.myValue);
}
}
};
</script>
多选
<template>
<el-form-item :label="label" :prop="prop" :rules="rules">
<el-checkbox-group v-model="myValue">
<el-checkbox v-for="item in checkboxdata" :key="item.id" :label="item.label" :name="name"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</template>
<script>
export default {
props: {
type: {
type: Array
},
prop: {
type: String
},
placeholder:{
type: String
},
label:{
type: String
},
value:{
type: Array
},
rules:[Object,Array],
name:{
type:String
},
checkboxdata:{
type:Array
} },
data(){
return {
myValue:[]
};
},
watch:{
myValue(val){
this.$emit("input",this.myValue)
console.log(val,"aaa")
}
}
}
</script>
单选和多选几乎一样就不发了
接下来聊聊今天遇到的问题
父组件中的 ruleForm.type 值为new Array()这是多选所以要传数组过去子组件用数组接再传回来就ok
和昨天一样就结果来看我们发现只有下拉栏使用了change事件 传回父组件而其他的子组件全都使用了watch监听,如果其他组件也使用change会发生什么后果呢?按照昨天的结论应该是change比watch快所以更没问题了~

这是什么情况?为什么只有下拉栏的change比watch快而其余的都是watch快???
经过一下午的冥思苦想和询问大佬,得到了不确定的答案,因为下拉栏的change事件是原生事件而时间选择器,多选框的change事件是element封装的事件,所以当然是原生的跑得快了。。
仔细一想好像挺有道理的啊!
vue+element 表单封成组件(2)的更多相关文章
- vue+element 表单封成组件(1)
作为一名刚接触vue不到一个月的菜鸟,思想还没有从操作DOM转变为数据驱动,看vue的代码处处别扭.组里为了让我熟悉vue交给了我一个将element 表单封装成组件的练手任务.由于开发过程中遇到的表 ...
- vue element 表单验证不通过,滚动到固对应位置
我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...
- vue+element表单校验功能
要实现这个功能其实并不难,element组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能: 实现这个功能,总共分 ...
- vue+element 表单验证
效果图 <template> <div class="formValidator"> <div v-for="(item,index) in ...
- vue element 表单多个验证时,滚动到验证提示的位置
最近项目有个下单的过程,需要输入很多信息,每次提交都要往下滑,还要去验证,测试后发现体验也不好,element框架也没提供这种滚动方法, 不过提供了一个验证的方法 validate (两个参数:是否校 ...
- 第四节:Vue表单标签和组件的基本用法,父子组件间的通信
vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...
- 表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这种写法就是把组件嵌套改为配置方式
表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这 ...
- Vue Element-ui表单校验规则,你掌握了哪些?
1.前言 Element-ui表单校验规则,使得错误提示可以直接在form-item下面显示,无需弹出框,因此还是很好用的. 我在做了登录页面的表单校验后,一度以为我已经很了解表单的校验规则. ...
- vue的表单编辑删除,保存取消功能
过年回来第一篇博客,可能说的不是很清楚,而且心情可能也不是特别的high,虽然今天是元宵,我还在办公室11.30在加班,但就是想把写过的代码记下来,怕以后可能真的忘了.(心将塞未塞,欲塞未满) VUE ...
随机推荐
- vue2.0学习之动画
下载animate.css <transition name="v"> <div class="content">需要做动画的内容< ...
- arduino驱动oled
OLED一款小巧的显示屏,感觉可以做出很可爱的东西. 这次实验的这款是128X64的OLED屏幕 , 芯片是SSD1306,请确认自家模块芯片型号,不然对不上号啊 使用IIC的方法,简单实验显示示例程 ...
- pytorch中的view函数和max函数
一.view函数 代码: a=torch.randn(,,,) b = a.view(,-) print(b.size()) 输出: torch.Size([, ]) 解释: 其中参数-1表示剩下的值 ...
- cs231n spring 2017 lecture2 Image Classification
1. 相比于传统的人工提取特征(边.角等),深度学习是一种Data-Driven Approach.深度学习有统一的框架,喂不同的数据集,可以训练识别不同的物体.而人工提取特征的方式很脆弱,换一个物体 ...
- abstract class
在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口.而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点 ...
- labview学习——用户界面模式
根据事件的发出源,事件可以抽象地分为用户界面事件和用户自定义事件.相关的基本知识可以参考有关的书籍,这里不再阐述事件结构的使用方法. 下图所示的结构称为用户界面事件模式,它能够很便捷地响应各种事件并且 ...
- Linux考试试题
mkdir -p /data/oldboy touch lodboy.txt echo "inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255. ...
- python2查找匹配数据及类型转换
判断一个字符是否包含在另一个字符串中,如果包含,但是数据类型不同,需要进行数据类型转换 下面这个是针对python2
- 性能分析之工具使用——cpu、io 、mem【工具分析】
nmon nmon 是一种在aix 与各种 Linux 操作系统上广泛使 用的监控与与分析工具,他主要记录以下内容: • cpu 占用率 • 内存使用情况 • 磁盘I/O 速度.传输和读写比率 • 文 ...
- SpringMVC学习笔记八:文件上传及多个文件上传
SpringMVC实现文件上传需要加入jar包,commons-fileupload-1.3.1.jar,commons-io-2.2.jar 项目目录树: pom.xml加入需要的包 <pro ...