Skip to content

Vue 2 语法速览

Vue 是一套用于构建用户界面的渐进式框架。Vue 2 已经终止支持且不再维护。 请升级到 Vue 3 或了解有关 Vue 2 终止支持 (EOL) 的信息。

-> 官网直达

场景

  1. 实例

Vue 应用是通过用 Vue 函数创建一个新的 Vue 实例开始的:

js
const vm = new Vue({
  // 选项对象
});
  • vm:ViewModel 的缩写,这个变量名表示 Vue 实例,该实例叫 根 Vue 实例
  • Vue 组件就是 Vue 实例。

组件

组件可能被用来创建多个实例。

API

attribute/指令

直接在组件上编写属性,如 <component attr="江湖聊IT"></component> 中的 attr

key

key 的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。

  • 如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。
  • 而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。

-> 查看更多官网对 key 的说明。


ref

ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。

  • 如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;
  • 如果用在子组件上,引用就指向组件实例:

-> 查看更多官网对 ref 的说明。


is

用于动态组件且基于 DOM 内模板的限制来工作。

-> 查看更多官网对 is 的说明。


v-slot

v-slot 是 2.6.0 新增的。slot 和 slot-scope 已废弃。

用于将元素或组件表示为作用域插槽,标记往哪个具名插槽中插入子组件内容。

限用于 <template> 上。

-> 查看更多官网对 v-slot 的说明。


v-model

随表单控件在表单控件或者组件上创建双向绑定,型不同而不同。

v-model 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

注意

v-model 会忽略所有表单元素的 valuecheckedselected attribute 的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。

v-model 在内部为不同的输入元素使用不同的 property 并抛出不同的事件:

  • texttextarea 元素使用 value property 和 input 事件;
  • checkboxradio 使用 checked property 和 change 事件;
  • select 字段将 value 作为 prop 并将 change 作为事件。

-> 查看更多官网对 v-model表单输入绑定的说明。


v-bind

动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。

缩写使用 :

-> 查看更多官网对 v-bind 的说明。


选项/数据

注意

注意,不应该使用箭头函数来定义 methodwatch 函数 (例如 plus: () => this.a++)。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined

data

Vue 实例的数据对象,只接受 function。Vue 会递归地把 data 的 property 转换为 getter/setter,从而让 data 的 property 能够响应数据变化。

一旦观察过,你就无法在根数据对象上添加响应式 property。因此推荐在创建实例之前,就声明所有的根级响应式 property。

实例创建之后,可以通过 vm.$data 访问原始数据对象。Vue 实例也代理了 data 对象上所有的 property,因此访问 vm.a 等价于访问 vm.$data.a

当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!

可以通过将 vm.$data 传入 JSON.parse(JSON.stringify(...)) 得到深拷贝的原始数据对象。

-> 查看更多官网对 data 的说明。


props

用于接收来自父组件的数据,可以是数组或对象,对象允许配置高级选项,如类型检测、自定义验证和设置默认值。

对象的语法:

  • type:可以是下列原生构造函数中的一种。
  • default:any。为该 prop 指定一个默认值。
  • required:Boolean。定义该 prop 是否是必填项。
  • validator:Function。自定义验证函数会将该 prop 的值作为唯一的参数代入。

-> 查看更多官网对 props 的说明。


computed

计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。

计算属性的结果会被缓存,除非依赖的响应式 property 变化才会重新计算。注意,如果某个依赖 (比如非响应式 property) 在该实例范畴之外,则计算属性是不会被更新的。

注意如果你为一个计算属性使用了箭头函数,则 this 不会指向这个组件的实例。

-> 查看更多官网对 computed 的说明。


methods

methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。

方法中的 this 自动绑定为 Vue 实例。

-> 查看更多官网对 methods 的说明。


watch

一个对象

  • 键是需要观察的表达式;
  • 值是对应回调函数。值也可以是方法名,或者包含选项的对象。

-> 查看更多官网对 watch 的说明。


选项/DOM

#el

提供一个在页面上已经存在的 DOM 元素作为 Vue 实例的挂载目标,在实例挂载之后,元素可以用 vm.$el 访问。

选项/生命周期钩子

所有生命周期钩子的 this 上下文将自动绑定至实例中,因此你可以访问 data、computed 和 methods。这意味着你不应该使用箭头函数来定义一个生命周期方法 (例如 created: () => this.fetchTodos())。因为箭头函数绑定了父级上下文,所以 this 不会指向预期的组件实例。

create: 是实例创建。

  • beforeCreate:
    • 实例初始化已经完成,负责数据侦听和事件/侦听器的配置之前同步调用。
    • 实例还未创建创建。
  • created:
    • 此时实例已经创建完成
    • 但还没有挂载,所以 $el 还没有被定义。

选项资源

选项组合

选项/其他

内置指令

全局配置

全局 API

风格指南

如有转载或 CV 的请标注本站原文地址