Vue组件间相互传递信息

                                                 


代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>通过props属性父组件向子组件传递内容</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <p>子组件接收父组件传递的数据(通过props属性传递):</p>
    <my-parent name="这是父组件要传递的内容"></my-parent>
    <p>
        $emit传值:$emit能够将子组件中的值传递到父组件中去。$emit可以触发父组件中定义的事件,子组件的数据信息通过传递参数的方式完成
    </p>
    <p>父组件定义事件处理函数transContent,并接收payload参数</p>
    <p>触发父组件中绑定的childfn事件,并传递子组件中的message数据</p>
    <parent></parent>
</div>
<!-- 定义的模板文件-->
<template id="child">
    <div>
        <button @click="click">Send</button>
        <input type="text" v-model="message">
    </div>
</template>

<hr/>
<div>
    <div v-if="isShow" ref="data_do">test</div>
    <button @click="isShow=!isShow">更新</button>
</div>


</body>
<script>
    let subVm = Vue.component('my-parent', {
        props: ['name'],
        template: '<p>从父组件获得的信息为 :{{name}}</p>'
    });

    // 定义组件parent
    Vue.component('parent', {
        template: '<div><child @childFn="transContent"></child>' +
            '子组件传来的值 : {{message}}</div>',
        data() {
            return {
                message: ''
            }
        },
        methods: {
            transContent(payload) {
                this.message = payload
            }
        }
    });
    // child组件
    Vue.component('child', {
        template: '#child',
        data() {
            return {
                message: '子组件的消息'
            }
        },
        methods: {
            click() {
                this.$emit('childFn', this.message);
            }
        }
    });

    let vm = new Vue({
        el: '#app',
        data: {
            isShow: false
        },
        methods: {
            beforeCreate() {
                console.log('实例创建之前')
                console.log(this.$data.msg)
            },
            created() {
                console.log('实例创建之后')
                console.log(this.$data.msg)
            },
            beforeMount() {
                console.log('挂载之前')
                // 通过this.$el获取el的DOM元素
                console.log(this.$el.innerHTML)
            },
            mounted() {
                console.log('挂载之后')
                console.log(this.$el.innerHTML)
            },
            beforeUpdate() {
                console.log('更新之前')
                console.log(this.$refs.data_do)
            },
            updated() {
                console.log('更新之后')
                console.log(this.$refs.data_do)
            },
            beforeDestroy () {
                console.log('销毁之前')
                console.log(this.$refs.data_do)
                console.log(this.msg)
                console.log(vm)
            },
            destroyed () {
                console.log('销毁之后')
                console.log(this.$refs.data_do)
                console.log(this.msg)
                console.log(vm)
            }




        }
    })


</script>
<style scopted>
    body {
        font-size: 14px;
        background-color: #efefef;
        font-family: "宋体"
    }

    #app {
        margin: 0px;
        border: 0px;
        padding: 0px;
        text-align: center;
    }
</style>
</html>

 效果:

 Vue生命周期:

钩子函数钩子函数用来描述Vue实例从创建到销毁的整个生命周期

 beforeCreatecreated创建实例对象之前或实例对象创建之后执行,案例演示如下。

vm配置对象中分别定义beforeCreatecreated钩子函数。

beforeMountmounted 实例创建后,如果挂载点el存在,就进行页面挂载

实例中配置对象中分别定义beforeMountmounted

beforeUpdateupdated Vue实例挂载完成后,当数据发生变化时,会执行beforeUpdateupdated钩子函数。

vm实例对象中分别定义beforeUpdateupdated

beforeDestroydestroyed生命周期函数的最后阶段是实例的销毁,会执行beforeDestroydestroyed钩子函数。

vm实例中定义beforeDestroydestroyed生命周期函数

beforeUpdate () {

    console.log('更新之前')

    console.log(this.$refs.div)

  },

  updated () {

    console.log('更新之后')

    console.log(this.$refs.div)

  }

beforeCreate () {

    console.log('实例创建之前')

    console.log(this.$data.msg)

  },

  created () {

    console.log('实例创建之后')

    console.log(this.$data.msg)

  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值