vue组件之间通信实例总结(点赞功能)

网络编程 2021-07-04 16:47www.168986.cn编程入门
这篇文章主要介绍了vue组件之间通信,结合实例形式分析了vue父子组件、兄弟组件之间通信的原理、实现方法,并给出了一个类似点赞功能的实例,需要的朋友可以参考下

本文实例讲述了vue组件之间通信。分享给大家供大家参考,具体如下

父组件--》子组件

①通过属性

步骤1

<son myName="michael" myPhone='123'></son>
<son :myName="userList[0]"></son>

步骤2

Vue.ponent('son',{
  props:['myName','myPhone']
})

②通过$parent

直接在子组件中通过this.$parent得到调用子组件的父组件

子组件--》父组件

①events up

步骤1在父组件中 调用子组件的时候 绑定一个自定义事件 和 对应的处理函数

methods:{
  recvMsg:function(msg){
  //msg就是传递来的数据
  }
},
template:'
<son @customEvent="recvMsg"></son>
'

步骤2在子组件中 把要发送的数据通过触发自定义事件传递给父组件

this.$emit('customEvent',123)

②$refs

reference 引用

步骤1在调用子组件的时候 可以指定ref属性

<son ref='zhangsan'></son>

步骤2通过$refs得到指定引用名称对应的组件实例

this.$refs.zhangsan

兄弟组件通信

步骤1创建一个Vue的实例 作为事件绑定触发的公共的对象

var bus = new Vue();

步骤2在接收方的组件 绑定 自定义的事件

bus.$on('customEvent',function(msg){
  //msg是通过事件传递来的数据 (传递来的123)
});

步骤3在发送方的组件 触发 自定义的事件

bus.$emit('customEvent',123);

每日一练

创建2个组件,main-ponent,son-ponent

视图

main-ponent 显示一个按钮
son-ponent 显示一个p标签

功能

main-ponent 定义一个变量count,初始化为0,将count传递给son-ponent,son-ponent接收到数据显示在p标签中

main-ponent 在点击按钮时,实现对count的自增操作,要求son-ponent能够实时显示count对应的数据

son-ponent在接收到count之后,在count大于10的时候,将main-ponent的按钮禁用掉
(参考<button v-bind:disabled="!isValid">clickMe</button>)

<!doctype html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>.jb51. 小练习</title>
  <script src="https://cdn.bootcss./vue/2.0.1/vue.min.js"></script>
 </head>
 <body>
 <div id="container">
    <p>{{msg}}</p>
    <main-ponent></main-ponent>
  </div>
  <script>
  /
    每日一练
创建2个组件,main-ponent,son-ponent
视图
 main-ponent 显示一个按钮
 son-ponent 显示一个p标签
功能
  main-ponent 定义一个变量count,初始化为0,将count传递给son-ponent,son-ponent接收到数据显示在p标签中
  main-ponent 在点击按钮时,实现对count的自增操作,要求son-ponent能够实时显示count对应的数据
  son-ponent在接收到count之后,在count大于10的时候,将main-ponent的按钮禁用掉
  (参考<button v-bind:disabled="!isValid">clickMe</button>)
  /
//创建父组件
    Vue.ponent("main-ponent",{
      data:function(){
        return {
          count:0,
          isDisabled:true
        }
      },
      methods:{
        //点击按钮对count进行自增
        //并通过$emit触发countAdd,并把count的值传递给子组件
        //判断count==10的时候让按钮禁用
        countAdd:function(){
          this.count++;
          console.log("对数据进行自增"+this.count);
          this.$emit("countAdd",this.count);
        }
      },
      template:`
        <div>
          <button @click="countAdd" v-bind:disabled="!isDisabled">点我</button>
          <son-ponent v-bind:myCount="count"></son-ponent>
        </div>
      `
    })
//创建子组件
    Vue.ponent("son-ponent",{
      //通过props接收父组件传递过来的值
      props:["myCount"],
      template:`
        <div>
          <p>{{myCount}}</p>
        </div>
      `,
      //数据更新完成后判断从父组件拿到的值
      updated:function(){
        if(this.myCount>10){
          //子组件通过$parent直接获取父组件的数据
            this.$parent.isDisabled = false;
          }
      }
    })
    new Vue({
      el:"#container",
      data:{
        msg:"Hello VueJs"
      }
    })
  </script>
 </body>
</html>

使用在线HTML/CSS/JavaScript代码运行工具测试,可得到如下运行效果

感兴趣的朋友还可以使用上述在线工具测试一下代码的运行效果。

希望本文所述对大家vue.js程序设计有所帮助。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by