ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Vue 组件自定义事件

2022-05-15 09:31:28  阅读:105  来源: 互联网

标签:Vue name 自定义 App export 组件 MyStudent methods


通过 子组件给父组件传递数据 了解组件自定义事件


props 实现:子给父传递数据

父组件

<template>
    <div class="app">
        <h2>{{msg}}</h2>
        <!--    通过父组件给子组件传递函数类型的 props 实现:子给父传递数据    -->
        <my-school :getSchoolName="getSchoolName"/>
    </div>
</template>

<script>

    import MySchool from "@/components/MySchool";

    export default {
        name: 'App',
        components: {MySchool},
        data() {
            return {
                msg: '你好'
            }
        },
        methods: {
            getSchoolName(name) {
                console.log('App 收到学校名称:', name)
            }
        }
    }
</script>

子组件

<template>
    <div class="school">
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
        <button @click="sendSchoolName">把学校名给 App</button>
    </div>
</template>

<script>
    export default {
        name: "MySchool",
        props: ['getSchoolName'],
        data() {
            return {
                name: 'ABC',
                address: '长沙'
            }
        },
        methods: {
            sendSchoolName() {
                this.getSchoolName(this.name)
            }
        }
    }
</script>

<style scoped>
    .school {
        background-color: #9ebbfc;
        padding: 5px;
    }
</style>


自定义事件实现:子给父传递数据

两种方法:

  1. 使用 v-on 或 @
  2. 使用 ref(更灵活)

父组件

<template>
    <div class="app">
        <h2>{{msg}}</h2>
        <!--    通过父组件给子组件绑定一个自定义事件实现:子给父传递数据    -->
        <!--    第一种写法:使用 v-on 或 @   -->
        <!--    <my-student v-on:hellodemo="getStudentName"/>    -->
        <my-student @hellodemo="getStudentName"/>

        <!--    通过父组件给子组件绑定一个自定义事件实现:子给父传递数据    -->
        <!--    第二种写法(更灵活):使用 ref   -->
        <!--    <my-student ref="MyStudent"/>    -->
    </div>
</template>

<script>

    import MyStudent from "@/components/MyStudent";

    export default {
        name: 'App',
        components: {MyStudent},
        data() {
            return {
                msg: '你好'
            }
        },
        methods: {
            getStudentName(name) {
                console.log('App 收到学生名称:', name)
            }
        },
        // 第二种方法
        // mounted() {
        //     this.$refs.MyStudent.$on('hellodemo', this.getStudentName)
        // }
    }
</script>

子组件

<template>
    <div class="student">
        <h2>学生姓名:{{name}}</h2>
        <h2>学生年龄:{{age}}</h2>
        <button @click="sendStudentName">把学生名给 App</button>
    </div>
</template>

<script>
    export default {
        name: "MyStudent",
        data(){
            return {
                name:'张三',
                age:19
            }
        },
        methods:{
            sendStudentName(){
                this.$emit('hellodemo',this.name)
            }
        }
    }
</script>


标签:Vue,name,自定义,App,export,组件,MyStudent,methods
来源: https://www.cnblogs.com/barwenyan/p/16272357.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有