2-5 vue 自定义事件 event up

自定义事件 event up

  • 我们知道,父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,应该怎样做?那就是自定义事件!

  • 每个 Vue 实例都实现了事件接口(Events interface),即:

    • 使用 $on(eventName) 监听事件
    • 使用 $emit(eventName) 触发事件

    另外,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。

  • 一个简单的官方案例帮助我们来理解:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="app">
    <p>{{ total }}</p>
    <button-counter v-on:clickcounter="clicktotal"></button-counter>
    <button-counter v-on:clickcounter="clicktotal"></button-counter>
</div>
<script src="js/vue.js"></script>
<script>
    // 1. 定义子组件
    Vue.component('button-counter', {
        template: '<button v-on:click="clickcounter">
                    {{ counter }}</button>',
        data: function () {
            return {
                counter: 0
            }
        },
        methods: {
            clickcounter: function () {
                this.counter += 1;
                // 触发事件
                this.$emit('clickcounter');
            }
        }
    })

    new Vue({
        el: '#app',
        data: {
            total: 0
        },
        methods: {
            clicktotal: function () {
                this.total += 1;
            }
        }
    })
</script>
</body>
</html>

运行结果:子组件已经和它外部完全解耦了。它所做的只是触发一个父组件关心的内部事件。

<strong>父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译</strong>

  • 上面话的意思在于:在子组件中定义的数据,只能用在子组件的模板;在父组件中定义的数据,只能用在父组件的模板。如果父组件的数据要在子组件中使用,则需要子组件定义props。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,474评论 0 29
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 13,802评论 4 129
  • 此文基于官方文档,里面部分例子有改动,加上了一些自己的理解 什么是组件? 组件(Component)是 Vue.j...
    陆志均阅读 9,259评论 5 14
  • Vue笔记系列1、Vue.js入门3、Vue.js进阶 API 以下会随用随记一些API,可能会不定期更新。 Vu...
    其心阅读 6,243评论 0 10
  • 今日是11月21号,8点36开始敲字,在开始这之前,我发现了一个秘密,在爱情深入人心时,人们会不由自主的记住一时刻...
    取名为正阅读 1,535评论 0 0

友情链接更多精彩内容