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>

 

posted @ 2019-01-16 16:05  懒懒同学不懒  阅读(189)  评论(0编辑  收藏  举报