zoukankan      html  css  js  c++  java
  • Vue源码之 $emit

    $emit(methodName, params)和v-on是紧密联系的,调用$emit的是子组件的vm实例,结果是调用了父组件对应的方法,那么这个是怎么做到的呢?

    在父组件的创新周期中生成父组件的虚拟节点的过程的时候,会递归生成子组件的虚拟节点。而生成子组件的虚拟节点的时候会把父组件中

    写在子组件节点上的 v-on 数据(key是上面$emit中的methodName,value是父组件vm中的对应的方法引用method)传递给子组件,

    放在VNode的parentListener属性中,在子组件的创建的时候,initEvents方法中,调用updateComponentListeners方法,放到

    子组件Vue实例vm._events数组中,而$emit方法也就是去vm._events数组中找到method然后调用。

    而之所以method的调用者一直都是父组件vm的实例,是因为在父组件生成虚拟节点之前,已经调用了initMethod方法,

    里面调用了method.bind(父vm实例)。

  • 相关阅读:
    ehcache 使用
    android 换肤 apk
    ant 打不同渠道包
    strawberry perl
    rest 网络设计开发,降低复杂性设计方案
    android 进度条
    android 算定义布局xml
    ant 自动打包
    c# 调用cmd 输出 阻塞 解决
    web service2
  • 原文地址:https://www.cnblogs.com/chuliang/p/12230018.html
Copyright © 2011-2022 走看看