Vue中父子组件之间传值,兄弟之间传值

组件

1.组件

组件就是把整个页面中局部的一部分抽取出来,可以实现重复使用,组件中包含模板,数据,关系;

使用:

//1.声明一个全局组件
Vue.component('组件名称',{
    data:function(){
        return {};
    },
    template:`模板字符串`,
    methods:{},
    mounted:{}
})
//2.注册局部组件
new Vue({
    el:'',
    data:{},
    components:{
        组件名称:{组件内容}
    }
});
//使用组件
<组件名称></组件名称>

2.组件之间传值

2.1父子传值
//父组件向子组件传递数据
//定义组件
Vue.component('组件名称',{
    props:['形参名称1','形参名称2'],
    data:function(){
        return{};
    },
    template:`模板字符串`,
    methods:{},
    mounted:{}
})
//使用:
<组件名称  参数名称1='值' v-bind:参数名称2='变量名'></组件名称>
 <div id="app">
        <!-- 父组件中的数据 -->
        <div>{{pmsg}}</div>
        <!-- 子组件中的数据 -->
        <menu-item title="来自父组件的值"></menu-item>
        <!-- //动态绑定值 -->
        <menu-item :title="ptitle" content='heeeeeeeee'></menu-item>
    </div>
    <script src="js/vue.js"></script>
    <script>
        //父组件向子组件传值
        
        // 定义一个子组件
        Vue.component('menu-item',{
            //添加props属性  是一个数组
            props:['title','content'],
            data:function(){
                return {
                    msg:'子组件本身的数据'
                }
            },
            template:'<div>{{msg +"====="+title + "=====" + content}}</div>'
        })
        var vm = new Vue({
            el:'#app',
            data:{
                pmsg:'父组件中的值',
                ptitle:'动态绑定的值'
            }
        })

2.2子组件向父组件传值

本质是向父组件传递数据:

1.在父组件引用子组件的语句中监听自定义事件

<组件名称 参数名称="值" v-on:自定义事件名称="处理函数($event)"> </组件名称>

2.在子组件的template中,触发事件

<button v-on:click="$emit('自定义事件名称',携带的数据)">触发事件 </button>

 <div id="app">
        <div :style='{fontSize:fontSize+"px"}'>{{pmsg}}</div>
        <menu-item :parr='arr' v-on:enlarge-text='handle'></menu-item>
    </div>
    <script src="js/vue.js"></script>
    <script>
        //子组件向父组件中传值 
        // props传递数据原则,单项数据流,由父组件向子组件传递
        /*子组件如何向父组件传递数据?
        首先子组件要触发一个自定义事件,同时父组件监听这个事件,当子组件触发自定义事件的时候,
        子组件会把事件会抛向父组件 父组件触发后会指行响应的动作
        */
        Vue.component('menu-item',{
            props:['parr'],
            template:`
                <div>
                    <ul>
                        <li :key='index' v-for='(item,index) in parr'>{{item}}</li>
                    </ul>
                    <button @click='$emit("enlarge-text")'> 扩发父组件中的字体大小</button>
                </div>
            `
        })
        var vm = new Vue({
            el:'#app',
            data:{
                pmsg:'父组件中的内容',
                arr: ['apple','orange','banana'],
                fontSize:10
            },
            methods:{
                handle:function(){
                    //扩大字体
                    this.fontSize+=3;
                }
            }
        })
    </script>
2.3兄弟之间传值
//兄弟之间传值需要借助事件中心进行数据的传递
//1.创建一个事件中心
var hub = new Vue();
//2.接收数据方,要向事件中心注册(绑定事件)
hub.$on('自定义事件名称',事件处理函数)
//3.发送数据方,向事件中心触发事件,并传递参数
hub.$emit('自定义事件名称',参数)
//4.数据接收方解绑事件
hub.$off('自定义事件名称')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值