zoukankan      html  css  js  c++  java
  • 理解微信小程序Wepy框架的三个事件交互$broadcast,$emit,$invoke

    $broadcast:

    $broadcast事件是由父组件发起,所有子组件都会收到此广播事件,除非事件被手动取消。事件广播的顺序为广度优先搜索顺序,如上图,如果页面Page_Index发起一个$broadcast事件,那么按先后顺序依次接收到该事件的组件为:ComA、ComB、ComC、ComD、ComE、ComF、ComG、ComH。如下图

     
     

    理解官方意思就是:如果通过当前组件进行$broadcast广播事件,那么就只有它的子组件能接收事件,它的父组件和兄弟组件是无法接收到消息。调用方式如下

            this.$broadcast('eventName', param1,param2,param3,......)

            然后在子组件的events里面定义eventName接收事件就行了,如下:

            events = {

                'eventName': (param1,param2......., $event:Event) => {

                    }

            }

    $emit

     $emit与$broadcast正好相反,事件发起组件的所有祖先组件会依次接收到$emit事件。如果组件ComE发起一个   $emit事件,那么接收到事件的先后顺序为:组件ComA、页面Page_Index。如下图:

     
     

    理解官方的意思就是:如果通过当前组件进行$emit广播事件,那么就只有它的父组件能接收事件,它的子组件和兄弟组件是无法接收到消息。调用方式如下

            this.$emit('eventName', param1,param2,param3,......)

            然后在父组件的events里面定义eventName接收事件就行了,如下:

            events = {

                'eventName': (param1,param2......., $event:Event) => {

                    }

            }

    $invoke

    $invoke是一个页面或组件对另一个组件中的方法的直接调用,通过传入组件路径找到相应的组件,然后再调用其方法。

    比如,想在页面Page_Index中调用组件ComA的某个方法:

    this.$invoke('ComA', 'someMethod', 'someArgs');

    如果想在组件ComA中调用组件ComG的某个方法:

    this.$invoke('./../ComB/ComG', 'someMethod', 'someArgs');

    理解官方的意思就是:如果通过当前组件进行$invoke触发事件,如果父组件已经在components里面引入了子组件就可以直接通过invoke来单独向子组件发送事件;如果是子组件之间的事件交互,第一个参数就需要对应组件的路径。调用方式如下

    父组件向子组件发送事件:

        this.$invoke('子组件,必须要单引号括起来', '子组件方法名称',  param1,param2,param3.......);

    子组件间发送事件:

    this.$invoke('子组件的相对路径', '子组件方法名称',  param1,param2,param3.......);



    作者:会撸码的小马
    链接:https://www.jianshu.com/p/3aeca9db1e51

  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/suihang/p/10456807.html
Copyright © 2011-2022 走看看