广州凡科互联网科技有限公司

营业时间
MON-SAT 9:00-18:00

全国服务热线
18720358503

公司门店地址
广州市海珠区工业大道北67号凤凰创意园

微信卖货小程序_vue 通过下拉框组件学习vue中的父

日期:2021-01-11 浏览:
vue 通过下拉框组件学习vue中的父子通讯       这篇文章主要介绍了vue 通过下拉框组件学习vue中的父子通讯的相关知识,文中涉及到了父组件,子组件的实现代码,需要的朋友可以参考下

如果说vue组件化开发中第一步应该了解的是什么的话,那无疑是父子组件之间是如何实现通讯的(说白了就是父子组件中数据是如何传递的),只有理解了这一步,才能更好的开发组件

这里先提出两个关键词: pro凡科抠图 与 emit :

写这个组件之前,先看看效果图:

 

组件开发分析:

既然是组件:

首先组件内部数据内容肯定是可变的(如上图中的"按时间排序"之类的),这必须由父组件传入(即父组件如何将数据传个父组件); 在选择了内容之后,如何将数据传出来(即子组件如何将数据传给父组件)

先写结构:

父组件

 !--下拉框父组件-- 
 template 
 div id="app" 
 oSelect @changeOption="onChangeOption" :selectData="selectData" /oSelect 
 selectData: 传入父组件需要传入的数据;格式:childDataName="parentDataName";
 onChangeOption: 子组件触发的事件名,通过触发一个事件从而来接收子组件的传过来的数据
 格式:@childEventName="parentEventName"
 注:可写多个
 /div 
 /template 
 script 
import oSelect from "@/components/select.vue"; //引入组件
export default{
 name: 'App',
 data(){
 return {
 selectData: {
 defaultIndex: 0, //默认选中的是第几个
 selectStatus: false, // 通过selectStatus来控制下拉框的显示/隐藏
 selectOptions: [ // 下拉框中的数据 name这样的参数,看项目是否有需求,可自行修改
 name: 'time',
 context: '按时间排序'
 name: 'view',
 context: '按浏览量排序'
 name: 'like',
 context: '按点赞数排序'
 name: 'reply',
 context: '按回复数排序'
 name: 'reward',
 context: '按打赏数排序'
 methods:{
 onChangeOption(index){
 //子组件通过一个事件来触发onChangeOption方法,从而传递一系列参数,这里的index就是传过来的
 this.selectData.defaultIndex = index;
 //触发过后,动态改变了需要值 
 components: {
 oSelect,
 //注册组件
 /script 

子组件

 template 
 !-- 下拉框组件html结构(子组件) -- 
 div @click="changeStatus" 
 !-- changeStatus事件: 点击实现下拉框的显示和隐藏 -- 
 h3 :name="selectData.selectOptions[selectData.defaultIndex].name"
 :class="{'select-title-active': selectData.selectStatus}" 
 !--属性name class的动态绑定-- 
 {{ selectData.selectOptions[selectData.defaultIndex].context }} 
 !--这里主要绑定选择的数据-- 
 /h3 
 transition name="slide-down" 
 !--transition 实现下拉列表显示隐藏时的动画-- 
 ul v-show="selectData.selectStatus" 
 v-for="(item,index) in selectData.selectOptions"
 @click="EmitchangeOption(index)"
 :class="{'select-option-active':selectData.defaultIndex===index}" 
 v-for:循环数据渲染下拉列表
 EmitchangeOption:点击下拉列表事件
 class:动态绑定被选中的数据
 {{ selectData.selectOptions[index].context }}
 /li 
 div /div 
 /ul 
 /transition 
 /div 
 /template 
 script 
export default{
 name: 'oSelect', //建议大家都写上这个,有利于我们知道这个组件叫什么名字
 //通过pro凡科抠图来接收父组件传过来的数据
 pro凡科抠图:{
 selectData: {
 type: Object //规定传过来的数据为对象,否则就会报错(其实这样写就是规避错误和良好的习惯)
 methods:{
 EmitchangeOption(index){
 this.$emit('changeOption',index);
 // 通过点击事件触发EmitchangeOption函数,传入当前点击下拉列表中的索引值index
 // 下拉框通过emit方法触发父组件中changeOption函数,动态传给父组件需要的数据,这里为索引值
 changeStatus(){
 // 通过changeStatus事件动态改变selectStatus的值,从而控制下拉框的显示隐藏
 this.selectData.selectStatus = !this.selectData.selectStatus
 /script 

总结

从以上的示例可以看出来,父组件传入数据,需要在父组件中线绑定一个属性,挂载需要传入的数据; 子组件接收父组件的数据通过 pro凡科抠图 方法来接收; 子组件传递数据需要使用 emit 方法来绑定父组件中事先设定好的方法,从而动态传递操作后需要的数据

最终效果如下:

 

附上组件中的css,仅供参考:

.select-box{
 position: relative;
 max-width: 250px;
 line-height: 35px;
 margin: 50px auto;
.select-title{
 position: relative;
 padding: 0 30px 0 10px;
 border: 1px solid #d8dce5;
 border-radius: 5px;
 transition-duration: 300ms;
 cursor: pointer;
.select-title:after{
 content: '';
 position: absolute;
 height: 0;
 width: 0;
 border-top: 6px solid #d8dce5;
 border-left: 6px solid transparent;
 border-right: 6px solid transparent;
 right: 9px;
 top: 0;
 bottom: 0;
 margin: auto;
 transition-duration: 300ms;
 transition-timing-function: ease-in-out;
.select-title-active{
 border-color: #409eff;
.select-title-active:after{
 transform: rotate(-180deg);
 border-top-color: #409eff;
.select-options{
 position: absolute;
 padding:10px 0;
 top: 45px;
 border:1px solid #d8dce5;
 width: 100%;
 border-radius: 5px;
.select-option-item{
 padding:0 10px;
 cursor: pointer;
 transition-duration: 300ms;
.select-option-item:hover,.select-option-active{
 background: #f1f1f1;
 color: #409eff;
 !--箭头css-- 
.arrow-top{
 position: absolute;
 height: 0;
 width: 0;
 top: -7px;
 border-bottom: 7px solid #d8dce5;
 border-left: 7px solid transparent;
 border-right: 7px solid transparent;
 left: 0;
 right: 0;
 margin: auto;
 z-index: 99;
.arrow-top:after{
 content: '';
 position: absolute;
 display: block;
 height: 0;
 width: 0;
 border-bottom: 6px solid #fff;
 border-left: 6px solid transparent;
 border-right: 6px solid transparent;
 left: -6px;
 top: 1px;
 z-index: 99;
 !--下拉框显示隐藏动画-- 
.slide-down-enter-active,.slide-down-leave{
 transition: all .3s ease-in-out;
 transform-origin:0 top;
 transform: scaleY(1);
.slide-down-enter{
 transform: scaleY(0);
.slide-down-leave-active{
 transition: all .3s ease-in-out;
 transform-origin:0 top;
 transform: scaleY(0);
}

总结

以上所述是小编给大家介绍的vue 通过下拉框组件学习vue中的父子通讯,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对凡科网站的支持!




新闻资讯

联系方式丨CONTACT

  • 全国热线:18720358503
  • 传真热线:18720358503
  • Q Q咨询:2639601583
  • 企业邮箱:2639601583@qq.com

首页
电话
短信
联系