带着实例继续学习(4):下拉框数据填充、组件生命周期、动态绑定事件

本文介绍如何在Vue中创建并使用子组件user-area来实现下拉选择地区的功能,包括子组件值的获取及事件的动态绑定。

下拉数据填充

新建子组件user-area.vue

<template>
    <div class="form-group">
        <label class="col-sm-2">地区</label>
        <div class="col-sm-10">
            <select v-model="selectedIndex" class="form-group" v-on:change="seletecChange">
                <option v-for="a in areas" v-bind:value="a.id">{{a.text}}</option>
            </select>
        </div>
    </div>
</template>

<script>
    export default{
        data:function () {
            return {
                selectedIndex:0,
                areas:[
                    {"id":0,"text":"--请选择--"},
                    {"id":1,"text":"北京"},
                    {"id":2,"text":"上海"}
                ]
            }
        },

        methods:{
            seletecChange(){
                this.$emit("childChange","userarea",this.selectedIndex)
            }
        }
    }
</script>

我们还可以更懒,还可以进一步封装,把获取子组件值,抽取一个公共方法,在user-login.vue里

setValue(key,value){
    this.$data[key] = value;
}
<user-areas v-on:childChange="setValue"></user-areas>

在使用子组件的时候绑定这个方方法,子组件里调用:

this.$emit("childChange","userarea",this.selectedIndex)

这里写图片描述

组件的生命周期

这里写图片描述
子组件何时被挂载到父组件上的?

    export default{
        created(){
            //alert(this.$children.length); //结果为0,说明子组件并没有挂载
        },
        mounted(){
            alert(this.$children.length); //结果为4,说明子组件到这里已经挂载上了
        },
        ......

动态绑定事件

我们前面都是这样绑定事件到组件上,非常恶心

<user-areas v-on:childChange="setValue"></user-areas>

在了解了简单的组件的声明周期之后,我们可以如下优化,实现动态绑定事件

mounted(){
    // 给每一个子组件绑定childChange事件
    this.$children.forEach(function (cc) {
        cc.$on("childChange",this.setValue);
    }.bind(this))
},

因为forEach 里的this 并不是外面的this,所以后面用bind(this)

这样我们在使用子组件的时候就清爽了

<user-name ref="uname" placeholder="请输入你的用户名" ></user-name>
<user-pass></user-pass>
<user-areas ></user-areas>
<user-submit></user-submit>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值