Skip to content

Latest commit

 

History

History
78 lines (64 loc) · 3.22 KB

AstElement.md

File metadata and controls

78 lines (64 loc) · 3.22 KB
declare type ASTElement = {
  type: 1;  // ast类型,1是标签,2是有表达式的文本,3表示纯文本
  tag: string; // 标签名
  attrsList: Array<{ name: string; value: string }>; // 属性数组
  attrsMap: { [key: string]: string | null };  // 属性key-value对象
  parent: ASTElement | void; // 父元素的AST
  children: Array<ASTNode>; // 子元素的AST数组

  static?: boolean;  // 静态元素
  staticRoot?: boolean; // 静态根元素
  staticInFor?: boolean; // 静态内容是否在for循环内
  staticProcessed?: boolean; // 当前元素已经处理过静态内容
  hasBindings?: boolean; // 元素需要动态编译

  text?: string; // 文本内容
  attrs?: Array<{ name: string; value: string }>;  // 属性数组,name是属性名,value是属性值
  props?: Array<{ name: string; value: string }>;  // prop
  plain?: boolean; // 没有属性
  pre?: true;  // 标签上有v-pre指令,标识该元素和子元素不用编译
  ns?: string;  // 标签的命名空间

  component?: string; // component元素的is属性值
  inlineTemplate?: true; // 标签上有inline-template
  transitionMode?: string | null;

  // slot比较复杂,涉及到多个组件。涉及到声明周期的各个部分,涉及到vnode创建的过程,之后会详细说
  slotName?: ?string; // slot元素上name属性的值
  slotTarget?: ?string; // slot属性的值
  slotScope?: ?string; // 用于作用域插槽时template元素上,表示scope值
  scopedSlots?: { [name: string]: ASTElement }; // 添加作用域插槽时template元素父级上 键值对,键是slotTarget,值是当前template元素

  ref?: string; // ref属性
  refInFor?: boolean; // 是否包含在for循环内

  if?: string; // v-if的表达式
  ifProcessed?: boolean; // 标识当前元素已经处理过v-if
  elseif?: string;  // v-else-if的表达式
  else?: true; // v-else时为true
  ifConditions?: ASTIfConditions;  // 与v-if相关的一组元素

  // v-for="(item, index) in items"
  // v-for="(value, key, index) in object"
  for?: string; // 要遍历的数据items
  forProcessed?: boolean; // 标识当前元素已经处理过v-for
  key?: string; // 虚拟dom做diff时候的key,这里如果v-for在自定义元素上,则必须有key
  alias?: string; // 遍历数组时的元素item或遍历对象时的值value
  iterator1?: string; // 遍历数组的索引index或遍历对象时的键key
  iterator2?: string; // 遍历对象时的索引index

  staticClass?: string; // 静态class
  classBinding?: string; // 有数据绑定的class表达式
  staticStyle?: string;  // 静态style
  styleBinding?: string; // 有数据绑定的style表达式
  events?: ASTElementHandlers;  // 没有.native来修饰添加的事件
  nativeEvents?: ASTElementHandlers; // 通过.native来修饰添加的原生事件

  transition?: string | true;
  transitionOnAppear?: boolean;

  model?: {
    value: string;
    callback: string;
    expression: string;
  };

  directives?: Array<ASTDirective>; // 存放普通指令相关信息

  forbidden?: true;  // 为true时表示,该标签是style或包含脚本的script
  once?: true; // v-once
  onceProcessed?: boolean;
  wrapData?: (code: string) => string;

  // weex specific
  appendAsTree?: boolean;
}