vue 组件间双向通信

vue 组件间通信

组件上的通信 $emit

**需求:**父级vue实例的data中的数据通过在组件上 以(:value=‘cont’)属性传递数据给子组件的形式, 使得数据在组件内部处理然后渲染在组件上
完成: 父级 —>向组件传递数据 组件对数据进行修改通过触发 $emit()提交事件 组件把处理过的数据又当作参数传给父级methods里的handleClick函数 去改变data中的数据 ----》由于vue是数据驱动视图 组件再通过属性传递数据的方式去渲染视图

  <div id="app">
        <my-component :value='cont' @input="handleClick"> </my-component>
    </div>
    <script>
        //  定义全局自定义组件
        Vue.component('myComponent', {
             //组件通过属性绑定的方式传来的数据
            props: ['value'],
            data () {
                return {
                    value1: this.value
                }
            },
            mounted () {
                var self = this;
                setInterval( function () {
                    console.log(this, self)
                    var val = self.value1++;
                    // $emit( 'input' ,val)   触发组件@绑定的input事件名所绑定的函数
                    handleClick函数并把val 当作参数传给handleClick
                    self.$emit('input', val);
                }, 1000)
            },
            // 组件的模板
            template: `<div>{{value}}</div>`
        })
    
    var vm = new Vue({
        el: '#app',
        data: {
            cont : 2,
        },
        methods: {
            handleClick (val) {
                this.cont = val;
                console.log(this.cont)
            }
        }
    })

两个组件间的通信

你可能会感到好奇,为什么要用Vue.prototype.bus = new Vue()
因为我们是在两个相互独立的组件上进行数据的通信,这里我们用到了 this.bus.$on(’ click’, contend1 => {}) 因为我们在Vue的原型上bus 的Vue实例, 所以我们可以通过this.bus 对Vue实例进行访问:
$on(‘click(可以自定义)’, ()=> { 执行回调函数}) 我们可以通过
$emit(‘click’, contend1) 来提交on绑定的回调函数执行 contend1是传给on绑定click事件函调函数的参数;

思路: t通信思路描述

定义

// 在Vue实例原型上添加了一个 名为bus的Vue实例
 Vue.prototype.bus = new Vue()
 var vm =  new Vue({
     el:'#app',
     components: {
         // 为了避免代码的可读性好我把组件写出全局组件
     }
 })

组件部分

Vue.component('myContend', {
 myContend: {
                data() {
                    return {
                        contend: ''
                    }
                },
                created () {
                    // 组件之间的通信
                    // 页面一创建完成就绑定在bus上的click事件 执行回调函数 参数是由this.bus.$emit触发的click事件传来的
                    this.bus.$on('click', contend1 => {
                    // contend 是由$emit('click', this.value) 参数一:自定义事件名 参数二: 传递的参数
                   // 通过 this.bus.$on('click', (content) => {}) //当通过this.bus.$on('click', () => {})来绑定的时候就找到对应的 this.bus.$emit('click', value)   实现组件间的相互通信 
                        this.contend = contend1
                    })
                },
                template: `<div> {{contend}} </div>`
})

Vue.component('myInput',{

                data () {
                    return {
                        initValue: ''
                    }
                },
                methods: {
                    handleClick () {
                        // bus是挂到在Vue原型上 this.bus 就可以拿到vue实例,通过$emit来主动触发一个click事件 
                        // this.initValue 传递给通过 this.bus.$on('click', (content)=> {})绑定的click函数 当作其回调函数的参数
                        this.bus.$emit('click', this.initValue)
                        console.log('何冲')
                    }
                },
                template: `<div>
                <input type="text" v-model.lazy="initValue"> </input>
                    <button @click="handleClick">提交</button>
                        </div> `

})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种流行的JavaScript框架,它允许您轻松地构建可重用的组件Vue组件是一个独立的功能部件,它可以通过不同的方式进行通信,以实现更好的交互和协作。以下是Vue中六种常用的组件通信方式: 1. Props Props是一种用于从父组件向子组件传递数据的机制。父组件可以将数据作为属性传递给子组件,并且子组件可以通过props属性来使用这些数据。 2. Events Events是一种Vue组件通信的双向机制,它允许子组件通过触发事件来向父组件发送消息。父组件可以监听这些事件,并根据需要作出响应。 3. Provide / Inject Provide / Inject是一种用于跨深度嵌套组件共享数据的机制。父组件可以通过provide属性将数据传递给子组件,然后子组件可以通过inject属性来访问这些数据。 4. Vuex Vuex是一种Vue状态管理器,它允许您在单个应用程序中管理共享状态。Vuex包含一个中央状态存储库,可以跨组件访问和修改状态,以实现更好的协作和交互。 5. ref 属性 Ref是一种用于访问组件实例的方法,它可以通过设置ref属性来指定组件的名称。然后你就可以通过$refs属性来访问该组件实例,并在组件进行通信。 6. $emit 和 $on $emit和$on是Vue的内置事件机制,它允许组件进行通信。$emit用于触发事件,而$on则用于监听事件。使用这种方式,您可以轻松地在组件传递消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值