vue——11-父子组件 父传值( 数据和方法 )给子

父子组件

<div id="enjoy">
    <parent></parent>
    <!--
    <my-child1></my-child1>
    会报错:因为外部拿不到子组件
    解决方法:单独子组件拿出来定义一下
    -->
    <child></child>
</div>

这里写图片描述

        {
            //1.子组件构造器
            let Child1 = Vue.extend({
                template: `<img src="../images/fashion-001.jpg" width="300">`
            });

            let Child2 = Vue.extend({
                template: `<img src="../images/fashion-002.jpg" width="300">`
            });

            //想要单独获得设置子组件
            Vue.component('child',Child1);

            //2.父组件
            Vue.component('parent', {
                //注册子组件
                components: {
                    'my-child1': Child1,
                    'my-child2': Child2
                },
                //在父组件下运行子组件
                template:`
                <div>
                <my-child1></my-child1>
                <my-child2></my-child2>
                </div>
                `
            });

            //3.关联位置
            new Vue({
                el: '#enjoy'
            })
        }

父组件给子组件传值

传数据

html

<div id="app">
    <!-- 父组件,可以在引用子组件的时候,通过属性绑定(v-bind:)的形式,
    把需要传递给子组件的数据,以属性绑定的形式,传递给子组件内部,供子组件使用 -->
    <com1 :parentmsg="msg"></com1>
</div>

在这里插入图片描述
js

        let vm = new Vue({
            el: '#app',
            data: {
                msg: '我是父组件中的数据!'
            },
            methods: {},
            components: {
                com1: {
                    template: '<h1>这是子组件---{{parentmsg}}---{{msg}}</h1>',

                    // 把父组件传递过来的 parentmsg 属性,先在 props
                    // 数组中定义一下,这样,才能使用这个数据
                    // 注意:组件中的所有 props 中的数据,都是通过父组件传递给子组件的
                    // props 中的数据都是只读的,无法重新赋值
                    props: ['parentmsg'],

                    // 注意:子组件中的 data 数据,并不是通过父组件传递过来的,
                    // 而是子组件自身私有的,比如:子组件通过Ajax,请求回来的数据,
                    // 都可以放在 data 身上;
                    // data 上的数据,都是可读可写的;
                    data() {
                        return {
                            msg: '我是子组件自身私有的数据!'
                        }
                    }
                }
            }
        });

传方法

html

<div id="app">
    <!-- 父组件向子组件传递方法,使用的是事件绑定机制;v-on,
    当我们自定义了一个事件属性之后,那么子组件就能够,来调用传递方法-->
    <com1 @func="show"></com1>
</div>

<template id="tmp1">
    <div>
        <h1>这是子组件</h1>
        <input type="button" @click="myclick" value="这是子组件中的按钮,点击它,触发父组件传递过来的 func 方法">
    </div>
</template>

在这里插入图片描述
js

        //定义一个字面量类型的组件模板对象
        let com1 = {
            template: '#tmp1',
            data() {
                return {
                    num1: 123,
                    num2: 456
                }
            },
            methods: {
                myclick() {
                    //当点击子组件的按钮的时候,如何拿到父组件传递过来的 func 方法,并调用?
                    //emit 英文原意:是触发、调用的意思
                    //emit 第一个参数表示事件名,之后的参数表示向事件中的方法所传入的参数
                    this.$emit('func', this.num1, this.num2)
                }
            }
        };

        let vm = new Vue({
            el: '#app',
            data: {},
            methods: {
                show(data1, data2) {
                    alert('调用了父组件的 show 方法:---' + data1 + '---' + data2)
                }
            },
            components: {
                //相当于 com1: com1
                com1
            }
        });

父子组件传方法的实例链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值