利用.sync语法糖实现父子通信、ref 的用法、利用事件总线的方式实现兄弟组件通信

1、利用事件总线的方式实现兄弟组件通信

在构造函数Vue的原型身上添加一个$bus属性 属性的值是Vue的实例化对象

事件总线事件不局限于兄弟组件传值总的特征 、先监听自定义事件 再发送自定义事件,频繁使用 会显得浪费性能

main.js文件

Vue.prototype.$bus=new Vue();

childA

<h1 @click="send">我是childA</h1>

methods:{

      /* 利用事件总线的方式实现兄弟传值 */

        send(){

            ()里面代表注册事件,传过去的值

            this.$bus.$emit('childV','成功实现兄弟传值')

        }

    }

childB

<h2>ChildB:{{childVStr}}</h2>

    data(){

        return {

            childVStr:'我是弟弟'

        }

    },

    created(){

兄弟组件通信 需要使用$on方法 值用回调函数接收

        this.$bus.$on('childV',v=>{

               console.log('v是childA传过来的')

               this.childVStr=v;

           })

    }

2、ref 的用法

/* $refs方法操作于原生DOM可以获取原生DOM元素 */

/* 使用this.$children也可以获取子组件的属性和方法 */

<h2 ref="haha">{{ msg }}</h2>

<button @click="fn">获取原生dom,修改dom内容,获取最新dom内容</button>

data(){

return{{

msg:'我爱taotao'

}

}

/*this.$nextTick() 及时更新数据,而直接log出来的是原来的值*/

fn() {

      this.msg = "成功获取原生DOM内容 我爱张sir";

      this.$nextTick(() => {

        console.log(this.$refs.haha.innerHTML);

      });

    }

3、利用.sync语法糖实现父子通信(父传子,子改父)

父组件

<ChildB :cmsg.sync="msg" />

 msg:  "我是父组件的人"

子组件

<h2 @click="change">{{cmsg}}</h2>

使用props接受父组件cmsg.sync传过来的值

 props:['cmsg']

 methods:{

        改父组件的值,可以使用$emit('update:(sync过来的值)', { })

        change(){

            this.$emit('update:cmsg','.sync的方法子改父')

        }

    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容