zoukankan      html  css  js  c++  java
  • vue组件之间传值

    父组件向子组件传值

    父组件可以在引用子组件时,通过属性绑定(v-bind:)的形式,把数据传递给子组件。在子组件的props中定义后即可使用数据

    <div id="app">
        <!-- 如果父组件传递的是静态的值,可以不用加:进行绑定 -->
        <!-- props命名驼峰式。在html中以短横线分隔命名 -->
        <com1 parent-msg="父组件数据2"></com1>
        <com1 :parent-msg="msg"></com1>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                msg: '父组件的数据'
            },
            components: {
                com1: {
    
                    template: '<h1>这是子组件-- {{parentMsg}}</h1>',
                    //props可以是数组!!把父组件传递过来的属性在props中定义以后才能使用。只读
                    //组件中的props中的数据都是通过父组件传递过来的。组件中的data数据都是子组件私有的,与父组件没有关系。可读可写
                    props: ['parentMsg'],
                    data() {
                        return {
                            title: 123,
                            content: 'qqq'
                        }
                    },
                },
    
            }
        })
    </script>

    父组件将方法传递给子组件

    父组件向自徐建传递方法,使用事件绑定机制。为子组件使用语句绑定事件(事件名1),其中调用父组件的事件(事件名2),并在子组件本身中绑定事件(比如点击事件为事件名3),在子组件的methods中定义事件(事件名3),在其中调用this.$emit('事件名2')

    <div id="app">
        <com2 @func="show"></com2>
    </div>

    <template id="tmpl"> <div> <h1>这是子组件</h1> <button @click="myclick">子组件按钮,点击触发父组件的事件</button> </div> </template>

    <script> new Vue({ el: '#app', data: {}, methods: { show() { console.log('调用了父组件的show方法') } }, components: { com2: { template: '#tmpl', methods: { myclick() { this.$emit('func') } } } } }) </script>

    子组件向父组件传值

    与 父组件向子组件传递事件类似,在this.$emit函数中,可添加参数。将子组件数据作为参数放在其中,在父组件方法调用时可以获取该参数

    new Vue({
        el: '#app',
        data: {
            datamsgFromSon: null
        },
        methods: {
            show(data) {
                console.log(data)
                this.datamsgFromSon = data
            }
        },
        components: {
            com2: {
                data() {
                    return {
                        sonmsg: {
                            name: '小头儿子',
                            age: 6,
                        }
                    }
                },
                template: '#tmpl',
                methods: {
                    myclick() {
                        //从第二个参数开始都是向父组件方法的传参
                        this.$emit('func', this.sonmsg)
                    }
                }
            }
        }
    })

     也可通过ref获取子组件的数据或方法

    <div id="app">
        <login ref="mylogin"></login>
        <button @click="btn">获取组件数据与事件</button>
    </div>
    <template id="tmpl">
        <h3>登录组件</h3>
    </template>
    
    <script>
        new Vue({
            el: '#app',
            methods: {
                btn() {
                    //通过$refs获取
                    console.log(this.$refs.mylogin.msg)
                    this.$refs.mylogin.show()
                }
            },
            components: {
                login: {
                    template: '#tmpl',
                    data() {
                        return {
                            msg: 'son msg'
                        }
                    },
                    methods: {
                        show() {
                            console.log('调用了子组件的show方法')
                        }
                    }
                }
            }
        })
    </script>
  • 相关阅读:
    ORACLE 查看进程数,已执行任务数, 剩余任务数,删除指定任务
    ORACLE 收集统计整个用户数据
    解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑
    利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建
    AES加解密
    JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
    JAVA 文件的上传下载
    shell启停服务脚本模板
    JAVA 设计模式之 原型模式详解
    JAVA 设计模式之 工厂模式详解
  • 原文地址:https://www.cnblogs.com/lianglanlan/p/10277561.html
Copyright © 2011-2022 走看看