vue2中子组件向父组件发射数据函数vm.$emit一个很大的坑(发射名有规则限制)

特别注意,vm.$emit 发射函数中的eventName  发射名称不能含有大写字母,否则发射失败!(但是系统不会给你任何提示)

在Vue中尽量【少使用驼峰命名方式,少用大写字母】,不知道何时就出一些稀奇古怪的问题,无法自拔!!

例如:

vm.$emit(son-data,[...args]) 或

vm.$emit(son_data,[...args]) 或直接

vm.$emit(sondata,[...args])

组件模板代码如下:

<head>
    <link rel="stylesheet" href="./src/css/bootstrap.css">
    <link rel="stylesheet" href="./src/css/app.css">

    <!-- 模板代码务必单独提出来,不能放在.container中,否则会报错,因为此作用域中的变量,在.container中没有!-->
    <template id="parent">
            <div>
                <p><span>这是一个父组件{{parent_value}} </span></p>
                <my-son v-bind:son_value="parent_value" @son-data="click_parent(event)" ></my-son>
                <hr >
            </div>
    </template>
    
    <template id="son">
              <ol>
                  <li>这是一个子组件{{son_value}}</li>
                  <p><button @click='click_son(event)'>son按钮触发</button></p>
              </ol>
     </template>

</head>
<body>

    <div class="container" >
            <my-parent v-bind:parent_value="g_data" ></my-parent>
    </div>
</body>

js代码如下:

 const app =  new Vue({
        el:".container",
        data:{
            g_data:"这是一个new Vue对象",
        },
        components:{
            "my-parent":{
                template: "#parent",
                //在自定义组件中,data必须是函数,最终返回一个对象(官方有说明)
                data:function(){
                    return {
                        parent_data:"这是一个局部父组件模板",
                    }
                },
                props:["parent_value"],
                methods:{
                    click_parent:function(...args) {
                        console.log(args);
                        console.log("接受成功");
                    }
                },
                //子组件
                components:{
                    "my-son":{
                        template:"#son",
                        data:function() {
                            return {
                                son_name:"发射成功",
                            }
                        },
                        props:["son_value"],
                            
                        methods: {
                            click_son:function(event) {
                               console.log("son的按钮已经点击成功,等待接受数据.....");
                                //这里的发射函数son-data如果改成son-Data中间出现大写字母,父组件迟迟接收不到结果。
                                //尼玛不知道为什么会这样设置,找了很久,终于测试出来了!
                               this.$emit("son-data",[this.son_value,this.son_name]);
                            }
                        }
                    }
                   
                }
                
            },
        }

    });


});

猜你喜欢

转载自blog.csdn.net/weixin_43343144/article/details/86229116
今日推荐