• Vue中组件之间的通讯


      父子通信

    1、父传子

    传递:当子组件在父组中做标签使用的时候,通过给子组件绑定一个自定义属性,值为要传递的数据。

    父组件中;eg:<One :val="message"/>

    接收:在子组件内部通过props进行接收,props接收的方式有两种。

    数组接收: props:["val"]
    对象接收: props:{
                  val:String, //接收数据的数据类型  
    },
    
    
    或是 props:{
                 val:{
                       type:String,
                       defaule:"##"  //默认值
                 }
           }

    2、子传父

    传递:当子组件给父组件传递数据的时候,通过调用父组件给子组件绑定的自定义事件,然后将值传递过去。

    接收:父组件通过自定义事件的函数来接收子组件传递过来的数据(注:这个自定义方法在绑定的时候不需要加())

    父组件给子组件绑定一个自定义方法;<One @handleTo="handleMessage">
    子组件通过this.$emit触发这个方法;
    methods:{
           handleSend(){
                  this.$emit("handleTo",需要传递的值)
           }
    }
    父组件接收,通过自定义方法后面的函数接收
    methods:{
           handleMessage(val){
               
           }
    }

    还可以通过自定义插槽完成子向父传值

    给子组件内部的slot绑定一个自定义属性

    <slot :icon="icon"></slot>

    在父组件中,子组件标签的内部书写一个template标签,通过scope来接收子组件传递过来的数据

    <Movie>
            <template  scope="props"> //scope接收到的数据是一个对象
                    <p>{{props.icon}}</p> 
            </template>
    </Movie>    

      非父子

    1、在Vue的原型身上添加一个公共的Vue实例,组件之间调用这个公共的实例$emit传递数据,$on接收数据

    在入口文件main.js中  Vue.prototype.Observer = new Vue();

    传值:methods:{
               handleSend(){
                     this.Observer.$emit("handle",要传递的值)
               }
          }
    接收:created(){
             this.Observer.$on("handle",(val)=>{接收到传递过来的值val})
         }

    2、上面的方法太耗费性能,我们可以直接手动封装$on、$emit、$off方法,在main.js 中引入  import  Observer  from  '   '  ;传递和接收的方法与上面一样。

    3、Event Bus  4、Vuex

  • 相关阅读:
    mysql删除重复数据
    Spring缓存注解
    Spring事物不回滚
    java.net.MalformedURLException: no protocol: www.baidu.com
    shred:减少删除文件的还原度
    rm命令防止误操作
    软链接:要根据软链接来写路径
    linux与windows文本文件间的转换:针对回车换行
    cat:文本编辑工具
    算术运算;赋值
  • 原文地址:https://www.cnblogs.com/AnAn-/p/10589499.html
Copyright © 2020-2023  润新知