最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue源码之event

    正文概述 掘金(派大星的黑板报)   2021-03-03   537

    编译阶段之parse

    Vue源码之event

    id = 'app'的ast

    Vue源码之event

    id = 'demo'的ast

    Vue源码之event
    Vue源码之event

    1.在闭合标签后执行closeElement,然后执行processElement执行processAttrs。

    2.processAttrs获取到el.attrsList,遍历判断name是否是指令,是的话获取修饰符通过对象返回出来。

    3.判断name为v-on进入逻辑执行,首先去掉@标签,然后调用addHandler向el中添加事件属性。

    4.addHandler首先做了一些修饰符标记的替换,接着判断修饰符中有native那么给el添加的是nativeEvents属性否则是events属性。

    5.接着设置一个newHandler对象,赋值value属性,还存在modifiers属性就添加进新对象中。

    6.最后判断nativeEvents/events属性是否存在name这个事件,不存在设置属性为新对象,存在一个,设置为数组,存在两个删一个丢新的进去。

    编译阶段之generate

    id = 'app'的code

    Vue源码之event

    id = 'demo'的code

    Vue源码之event
    Vue源码之event

    1.执行到generate阶段,执行genElement,执行genData,对于events和nativeEvents都是执行genHandlers函数传入个标识判断而已。

    2.genHandlers首先根据标识确认输出nativeOn还是on属性名。

    3.接着遍历传入的el.events或者el.nativeEvents,然后通过执行genHandler获取到handlerCode,接着和事件名name拼接起来,最后再和之前确认的属性名进行拼接。

    原生DOM事件

    • create阶段
    Vue源码之event

    1.首先patch开始时会创建cbs对象和hooks,遍历Hooks为cbs添加hook属性为数组,接着继续遍历modules把modules定义相同hooks丢进数组中。最终返回cbs对象。

    2.对于create除了按顺序执行存在data属性会调用invokeCreateHooks之外,在创建组件初始化完成时调用initComponent也会调用invokeCreateHooks。

    3.invokeCreateHooks就是遍历调用cbs.create的函数,也就是执行updateDOMListeners,传入空vnode和vnode,

    4.updateDOMListeners获取到vnode.data.on对象和获取vnode.elm节点,执行updateListeners,遍历on对象,cur=createFnInvoker返回的函数,把回调赋值给了invoker.fns,此函数是执行回调用的,然后调用add也就是调用addEventListener给节点添加事件和此函数,当点击触发时就执行此函数执行回调。

    • update阶段
    Vue源码之event

    1.对于update就是patch时不再是首次渲染,调用patchVnode时,如果vnode存在data对属性进行更新遍历调用cbs.update的函数,也就是updateDOMListeners,传入oldVnode和vnode,

    2.updateDOMListeners获取到vnode.data.on对象和获取oldVnode.data.on对象,获取vnode.elm节点,执行updateListeners,遍历on对象,如果新旧的回调不同,把old.fns赋值为cur也就是新vnode的回调事件。

    自定义事件作用在组件上

    Vue源码之event
    Vue源码之event

    总结

    Vue源码之event
    Vue源码之event

    起源地下载网 » Vue源码之event

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元