组件交互(Props和$emit)

Props

将父组件中的数据传到子组件中,在父组件中引入子组件,子组件通过props来接收

注意组件引入

父组件App.vue

<template>
    <div>
        我是父组件
    <Son :title="myTitle"></Son>
    </div>
</template>

<script>
// import 和components 引入组件
import Son from './components/Son.vue'
export default{
    data(){
        return{
            myTitle:'vue'
        }
    },
    components:{
        Son
    }
}
</script>

子组件Son.vue

<template>
    <div>
        我是子组件{{ title }}
    </div>
</template>

<script>
export default{
    //子组件通过props进行接收
    props:['title']
}
</script>

$emit(自定义事件交互)

子组件数据传递给父组件。在子组件的emit中定义自定义事件,在父组件中使用然后触发父组件中定义的方法,修改myTitle的内容,最后子组件还可通过props进行接收父组件所改内容。

注意组件引入

父组件App.vue

<template>
    <div>
        我是父组件
    <Son :title="myTitle" @changeTitle = "handlechange"></Son>
    <!-- 注意changeTitle为子组件的自定义事件-->
    </div>
</template>

<script>
// import 和components 引入组件
import Son from './components/Son.vue'
export default{
    data(){
        return{
            myTitle:'vue'
        }
    },
    methods:{
        handlechange(newTitle){
            this.myTitle=newTitle
    },
    components:{
        Son
    }
}
</script>

子组件Son.vue

<template>
    <div>
        我是子组件{{ title }}
        <button @click="changeFn">修改title</button>
    </div>
</template>

<script>
export default{
    //子组件通过props进行接收
    props:['title'],
    methods:{
        changeFn(){
            //通过emit,向父组件发送消息通知
            this.$emit('changeTitle','新的标题')//第一个引号下为自定义事件,第二个引号下为传参
        }
    }
}
</script>

Props校验

props的校验写法

<script>
export default{
    props:{
        校验属性名:{
            type:Number,
            required:true,
            default:"默认标题"
            validator(value){
                //自定义校验方法
                return 是否通过校验
            }
        }
    }  
}

注:当校验类型为数组时(type:Array),默认值必须采用函数的形式

default:Function(){  //大写

        return【】//数组

}

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值