[TOC]
****
## 3 events.js 事件解析
>[info] import
~~~
;(导入)数组判断基础工具
import { isArray } from 'shared/util'
~~~
>[info] module
~~~
;简单路径正则
const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/
;按键别名
const keyCodes = {
esc: 27,
tab: 9,
enter: 13,
space: 32,
up: 38,
left: 37,
right: 39,
down: 40,
'delete': [8, 46]
}
;代码转换
const modifierCode = {
stop: '$event.stopPropagation();',
prevent: '$event.preventDefault();',
self: 'if($event.target !== $event.currentTarget)return;'
}
;生成事件接口
export function genHandlers (events) {
let res = 'on:{'
for (const name in events) {
res += `"${name}":${genHandler(events[name])},`
}
return res.slice(0, -1) + '}'
}
;生成事件处理函数
function genHandler (handler) {
if (!handler) {
return 'function(){}'
} else if (isArray(handler)) {
return `[${handler.map(genHandler).join(',')}]`
} else if (!handler.modifiers) {
return simplePathRE.test(handler.value)
? handler.value
: `function($event){${handler.value}}`
} else {
let code = 'function($event){'
for (const key in handler.modifiers) {
code += modifierCode[key] || genKeyFilter(key)
}
const handlerCode = simplePathRE.test(handler.value)
? handler.value + '($event)'
: handler.value
return code + handlerCode + '}'
}
}
;按键处理
function genKeyFilter (key) {
const code = keyCodes[key]
if (isArray(code)) {
return `if(${code.map(c => `$event.keyCode!==${c}`).join('&&')})return;`
} else {
return `if($event.keyCode!==${code})return;`
}
}
~~~
>[info] export
~~~
;(导出)事件解析接口
export function genHandlers (events) {}
~~~
- 概述
- 框架结构
- 编译入口(\entries)
- web-compiler.js(web编译)
- web-runtime.js(web运行时)
- web-runtime-wih-compiler.js(web编译运行)
- web-server-renderer.js(web服务器渲染)
- 核心实现 (\core)
- index.js(核心入口)
- config.js(核心配置)
- core\util(核心工具)
- core\observer(双向绑定)
- core\vdom(虚拟DOM)
- core\global-api(核心api)
- core\instance(核心实例)
- 模板编译(\compiler)
- compiler\parser(模板解析)
- events.js(事件解析)
- helper.js(解析助手)
- directives\ref.js(ref指令)
- optimizer.js(解析优化)
- codegen.js(渲染生成)
- index.js(模板编译入口)
- web渲染(\platforms\web)
- compiler(web编译目录)
- runtime(web运行时目录)
- server(web服务器目录)
- util(web工具目录)
- 服务器渲染(\server)
- render-stream.js(流式渲染)
- render.js(服务器渲染函数)
- create-renderer.js(创建渲染接口)
- 框架流程
- Vue初始化
- Vue视图数据绑定
- Vue数据变化刷新
- Vue视图操作刷新
- 框架工具
- 基础工具(\shared)
- 模板编译助手
- 核心实例工具
- Web渲染工具
- 基础原理
- dom
- string
- array
- function
- object
- es6
- 模块(Module)
- 类(Class)
- 函数(箭头)
- 字符串(扩展)
- 代理接口(Proxy)
- 数据绑定基础
- 数据绑定实现
- mvvm简单实现
- mvvm简单使用
- vdom算法
- vdom实现
- vue源码分析资料