组件传值

1、父子(向下)传值:通过属性
    // 1、传递的属性不能出现大写。需要用-分割。大写转为小写
    // 2、从父级接收过来的数据是不允许直接修改。
    // 3、接收过来的属性名,不允许与当前组件的数据名(data属性名)相同
<body>
<div id="root">
    <input type="button" @click="fn" :value="n">
    <one :abc="n"></one>
</div>
</body>
<script>
    new Vue({
        el:"#root",
        data:{
            n:1
        },
        components:{
            one:{
                // 通过props可以限制接收的数据。
                props:["abc"],
                template:`
                    <div>one {{abc}}</div>
                `
            }
        },
        methods:{
            fn(){
                this.n ++;
            }
        }
    })
</script>

2、子父(向上)传值:通过自定义事件
    <wrap v-show="isShow" @abcdefg="changeIsShow"></wrap>
    @click="$emit('abcdefg',false)"
3、非父子传值:通过bus.
    *发布与订阅需要在同一个实例下才能够起效果。
    $on:接收消息
    $off:取消订阅。
    $once:接收一次
    $emit:发布消息
<div id="root">
    <input type="button" @click="fn" :value="num">
    <My></My>
</div>
</body>
<script>
    // 发布者与订阅者。
    new Vue({
        el:"#root",
        data:{
            num:1
        },
        methods:{
           fn(){
               // 发布一个名字为one的消息。
               this.$emit("one",1,2,3,4);
           }
        },
        components:{
            My:{
                methods:{
                    fn(){
                        this.$emit("one",2,3,4,5);
                        console.log("我是子组件My的一个函数")
                    }
                },
                template:`
                    <div><input type="button" @click="fn"></div>
                `
            }
        },
        mounted(){
            // 声明订阅者,订阅了一个名字为one的消息
            this.$on("one",(a,b,c,d)=>{
                this.$off("one");
                console.log(1111111111,a,b,c,d);
            })
   
        }
    })
</script>


 

ref

父组件调用子组件的数据和方法

  this.$ref.子组件的ref标识.子组件的数据或方法

子组件调用父组件的数据或方法

  this.$parent.父组件数据或方法

原文地址:https://www.cnblogs.com/dudududadada/p/13396220.html