vue---自定义事件组件交互

可以理解成数据的反向传递,上一节我们讲了从App.vue里面传入了MyComponent里面,但是没有反向传递。反向传递可以通过自定义事件来进行传递。

自定义事件可以在组件中反向传递数据,prop可以将数据从父组件传递到子组件,反向操作就可以利用自定义事件$emit实现。

1、首先打开开发者工具,在终端进行启动:npm run serve

2、在components中创建文件MyComponent.vue

3、在MyComponent.vue中写入:

<template>
    <h3>自定义事件传递数据</h3>
</template>

<script>
    export default{
        name:"MyComponent"
}
</script>

<style scoped>
<style>

4、在App.vue中输入:

<template>
    <MyComponent />
</template>

<script>
    import MyComponent from './components/MyComponent.vue'
    export default{
        name:'App',
        components:{
            MyComponent
        }
    }
</script>

在网址中输入localhost:8080,可以看到内容已经可以显示出来。

现在开始尝试把MyComponent内容传递给App:

1、先准备数据,在MyComponent.vue中输入:

<template>
    <h3>自定义事件传递数据</h3>
    //传递数据需要事件触发
    <button @click="sendClickHandle">点击传递</button>
</template>

<script>
    export default{
        name:"MyComponent"
        data(){
            return{
                message:"MyComponent中的数据"
            }
        },
        methods:{
            sendClickHandle(){
                    //参数1:字符串,理论上是随意起的名字,但是需要具有意义
                    //参数2:传递的数据
                  this.$emit("onEvent",this.message)
           }
        }
}
</script>

<style scoped>
<style>

2、在App.vue中输入:

<template>
    <MyComponent @onEvent="getDataHandle"/>
</template>

<script>
    import MyComponent from './components/MyComponent.vue'
    export default{
        name:'App',
        components:{
            MyComponent
        },
        methods:{
            getDataHandle(data){
                console.log(data);//控制台输出:MyComponent中的数据
            }
        }
    }
</script>

在MyComponent.vue当中写的onEvent是字符串,在App.vue当中当做事件来看,这种就叫自定义式事件。

因为在MyComponent.vue的methods当中写了this.$emit("onEvent",this.message)传递了this.message数据,就相当于给到这个自定义事件onEvent中,变成了onEvent当中的参数,
自定义事件叫做getDataHandle,在这里就相当于我们能拿到这个data。

让数据在页面上进行输出:

在App.vue中输入:

<template>
    <MyComponent @onEvent="getDataHandle"/>
    <p>{{message}}</p>
</template>

<script>
    import MyComponent from './components/MyComponent.vue'
    export default{
        name:'App',
        data(){
            return{
                message:""
            }
        },
        components:{
            MyComponent
        },
        methods:{
            getDataHandle(data){
                this.message=data;
            }
        }
    }
</script>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值