• Vue父子组件之间的通讯(学习笔记)


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    </head>
    <body>
    <div id="app">
        <cheng :k="h1s" @ch="ch"></cheng>
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
    /*
        说明:在子组件里面通过prpos接收到父组件传的值是不能改变的,不过可以自己定义一个变量来赋值改变,如果想要改变数据源的话必须通过$emit来进行事件发布
        1、父组件给子组件传值:
            props传递参数
    			父组件 -> 子组件传参
    				在使用子组件标签的时候,写在行间
    				:key="数据"
    				key值是子组件规定
            本案例:
                父组件定义h1s的数据 通过:k 传递给子组件
                子组件通过props来接收,required:true是定义的规则,也可以使用数组来接收,这样就不会有任何规则
    
        2、子组件给父组件通讯
            父组件关心子组件某个状态的改变、事件的发生
    			组件 -> 父组件
    				子组件中发布一个事件,
    				this.$emit()
            本案例:
                子组件定义一个事件,通过this.$emit('ch',"我改变了标题")来定义和父组件的通讯关系。
                父组件接收子组件传过来的事件ch 然后@ch='父组件自定义函数'
                 this.$emit('ch',"我改变了标题")里面的ch是定义好给父组件传递的事件,'我改变了标题'是传递的参数
    */
    
    new Vue({
        el:"#app",
        data:{
            h1s:'我是一个标题',
            arr:[
                {
                    title:"新闻",
                    list:['新闻1','新闻2']
                },
                {
                    title:"体育",
                    list:['体育1','体育2']
                },
            ]
        },
        methods:{
            ch(value){
                console.log("子组件发布事件,父组件接收了",value)
                this.h1s = value
            }
        },
        components:{
            "cheng":{
                props:{
                    k:{
                        type:String,
                        required:true
                    }
                },
                data(){
                    return {
                        a:""
                    }
                },
                template:`
                    <div>
                        <h1>{{k}}</h1>
                        <button @click="changes">按钮</button>
                    </div>
                `,
                methods:{
                    changes(){
                        console.log("子组件事件")
                        this.$emit('ch',"我改变了标题")
                    }
                }
            }
        }
    })
    </script>
    </html>
    

      

  • 相关阅读:
    Unable to load the specified metadata resource
    Web开发人员速查卡
    vs 中大括号之间垂直虚线显示
    第4届华为编程大赛决赛试题解答(棋盘覆盖)
    assert()函数用法总结
    Win7安装VC++6.0已知的兼容性问题的解决方法
    VC6打开一个文件或工程的时候,会导致VC6崩溃而关闭
    浮点数取整.
    1.4 VC6.0在win7下安装的兼容性问题以及解决办法
    华为编程大赛_将字符数组内的数字排序
  • 原文地址:https://www.cnblogs.com/chengxiang123/p/8645399.html
Copyright © 2020-2023  润新知