Vue组件之组件间数据交互

父组件向子组件传递值

在这里插入图片描述
先看一个父组件向子组件传递数据的例子:
在这里插入图片描述
父组件通过属性的方式静态传递值给子组件,子组件通过props接收,效果如下:
在这里插入图片描述

父组件还可以通过动态绑定的方式动态传值给子组件:
在这里插入图片描述
在这里插入图片描述
还可以混搭传值:
在这里插入图片描述

==注意:==props属性命名规则:
在这里插入图片描述

注意: v-bind绑定和不加冒号绑定区别:

<body>
    <div id="app">
        <div>{{ pmsg }}</div>
        <menu-item a="true" :b="true" c="14" :d="14"></menu-item>
    </div>
    <script>
        Vue.component('menu-item', {
            props: ['a','b','c','d'],
            data: function () {
                return {
                    msg: 'Data within child component'

                }
            },
            template: `
                        <div>
                            <div>
                                <span>Value</span>
                                <span>&nbsp</span>
                                <span>Type</span>
                            </div>
                            <div>
                                {{ a }} {{ typeof a }}
                            </div>
                            <div>
                                {{ b }} {{ typeof b }}
                            </div>
                            <div>
                                {{ c }} {{ typeof c }}
                            </div>
                            <div>
                                {{ d }} {{ typeof d }}
                            </div>
                        </div>
            `
        })
        var vm = new Vue({
            el: '#app',
            data: {
                pmsg: 'message from parent component'
            },
            methods: {

            }
        })

在这里插入图片描述
结果:
在这里插入图片描述
v-bind绑定可以保留数值的原始类型,不加冒号绑定结果都是字符串

父子组件传递数值之传数组:

<body>
    <div id="app">
        <menu-item :a="arr"></menu-item>
    </div>
    <script>
        Vue.component('menu-item', {
            props: ['a'],
            template: `
            <ul>
                <li :key="index" v-for="(item,index) in a">{{ item }}</li>
            </ul>
            `
        })
        var vm = new Vue({
            el: '#app',
            data: {
                arr: ['Vue','React','Flutter','Jquery','Angular','Backbone']
            },
            methods: {

            }
        })
    </script>
</body>

结果:
在这里插入图片描述

父子组件传递数值之传对象:

在这里插入图片描述
结果:
在这里插入图片描述

子组件向父组件传递值

在这里插入图片描述

<script>
        Vue.component('menu-item',{
            props:['val'],
            template:`
            <div>
                <ul>
                    <li :key="index" v-for="(item,index) in val">{{ item }}</li>
                </ul>
                <button @click="val.push('Node')">Click</button>
            </div>
            `
        });
        var vm = new Vue({
            el: '#app',
            data: {
                arr:['Vue','React','Angular']
            },
            methods: {

            }
        })
    </script>

结果:
在这里插入图片描述
我们可以在子组件中去操作父组件中的数组,但是强烈不推荐这样做

注意 props传递数据有一个原则:单向数据流原则

那么子组件怎么才能向父组件传递信息呢?

通过自定义事件$emit传递

在这里插入图片描述
我们先通过自定义事件的方式让子组件操作父组件的数据:
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
我们现在来从子组件传递数据给父组件:
在这里插入图片描述

<script>
        Vue.component('menu-item',{
            props:['val'],
            template:`
            <div>
                <ul>
                    <li :key="index" v-for="(item,index) in val">{{ item }}</li>
                </ul>
                <button @click="val.push('Node')">Click</button>
                <button @click="$emit('enlarge-it',20)">Enlarge!</button>
            </div>
            `
        });
        var vm = new Vue({
            el: '#app',
            data: {
                arr:['Vue','React','Angular'],
                fontSize: 10
            },
            methods: {
                handle:function(val){
                    this.fontSize += val
                }
            }
        })
    </script>

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值