美文网首页
vue 组件通信

vue 组件通信

作者: 水母云 | 来源:发表于2019-01-17 17:58 被阅读0次

组件关系可分为父子组件通信、兄弟组件通信、跨级组件通信。
自定义事件:
当子组件需要向父组件传递数据时,就要用到自定义事件。v-on除了监听DOM事件外,还可以用于组件之间的自定义事件。
子组件用$emit() 来触发事件,父组件用$on()来监听子组件的事件。
父组件也可以直接在子组件的自定义标签上使用v-on来监听子组件触发的自定义事件,示例:

通过向父组件监听子组件自定义事件,子组件像父组件传递参数,触发事件,编写的一个加减按钮以及总数统计
<div id="app">
        <p>总数:{{total}}</p>
        <my-component @increase="handleGetTotal" @reduce="handleGetTotal"></my-component>
    </div>
    <script>
        Vue.component('my-component', {
            // template的内容如果有换行,就要有'\'
            // 点击按钮则触发方法
            template: '\
            <div>\
                <button @click="handleIncrease">+1</button>\
                <button @click="handleReduce">-1</button>\
            </div>',
            data: function() {
                return{
                    counter: 0
                }
            },
            methods: {
                // 点增加按钮,则将定义返回的data:counter+1,传递参数,并且返回到父组件increase,并触发handleGetTotal方法
                handleIncrease: function() {
                    this.counter ++;
                    this.$emit('increase', this.counter);
                },
                handleReduce: function() {
                    this.counter --;
                    this.$emit('reduce', this.counter);
                }
            }
        });
        // 挂载
        var app = new Vue({
            el: '#app',
            data: {
                total:0
            },
            methods: {
                handleGetTotal: function(total) {
                    this.total = total;
                }
            }
        })
    </script>

子组件有两个按钮,分别实现加1和减1的效果,在改变组件的data“counter”后,通过$emit()再把它传递给父组件,父组件用v-on:increase和v-on:reduce。$emit()方法的第一个参数是自定义事件的名称,例如示例的increase和reduce后面的参数都是要传递的参数,可以不填或者填写多个。
使用v-model代替监听功能,实现双向绑定

实现输入框数据绑定,并且有个功能按键
<div id="app">
        <p>总数:{{total}}</p>
        <my-component v-model="total"></my-component>
        <button @click="handleReduce">-1</button>
    </div>
    <script>
        Vue.component('my-component', {
            props: ['value'],
            template: '<input :value=value @input="updateValue">',
            methods: {
                updateValue: function (event) {
                    this.$emit('input', event.target.value);
                }
            }       
        });
        var app = new Vue({
            el: '#app',
            data: {
                total: 0
            },
            methods: {
                handleReduce: function(){
                    this.total --;
                }
            }
        })
    </script>

在自定义组件上使用v-model指令,绑定数据。若要实现这样一个具有双向绑定的v-model组件要满足下面两个要求:1.接收一个value属性;2.在有新的value时触发input事件。
vue组件的3个API来源:props传递数据,events触发事件,slot内容分发。

相关文章

  • vue组件之间通信

    vue 组件之间通信 vue组件之间通信方式: 1.父组件通过props向下传数据给子组件,子组件通过$emit事...

  • 【Vue】组件通信(任意通信)

    本节所需的基础知识: 【Vue】组件通信(父传子props) 【Vue】组件通信(子传父$emit) 任意组件相互...

  • vue 组件通信方式 ,父子、隔代、兄弟 三类通信,六种方法

    Vue 组件间通信只要指以下 3 类通信:父子组件通信、隔代组件通信、兄弟组件通信,下面分别介绍每种通信方式且会说...

  • Vue相关知识点

    1、vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不...

  • Vue如何实现组件通信?

    Vue组件通信的三种情况: 父子通信 爷孙通信 兄弟通信 父子通信:父组件使用Prop向子组件传递数据,子组件通过...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • Vue组件通信

    Vue组件通信 Vue组件关系可分为三大类: 父子组件 兄弟组件 跨级组件, 相应的组件之间的通信也分类三大类: ...

  • vue组件间通信的一些实用方法(VUE2.x)

    vue组件间通信的一些实用方法(VUE2.x) 一、父子组件间通信 常用的父子组件通信方法,一般涉及props和$...

  • vue组件通信(传值)

    1.父子通信 1.父组件(parent.vue) 子组件(child.vue) 2.子父通信 1.子组件(chil...

  • Vue组件通信

    总体来说,Vue中组件之间的通信场景如下图: 可以将其分为父子组件通信、兄弟组件通信、跨级组件通信。 1. 自定义...

网友评论

      本文标题:vue 组件通信

      本文链接:https://www.haomeiwen.com/subject/aoaidqtx.html