目录
Vue 2.x API
全局配置
silent
optionMergeStrategies
devtools
errorHandler
warnHandler
ignoredElements
keyCodes
performance
productionTip
属性
$data
$props
$el
$options
$parent
$root
$children
$slots
$scopedSlots
$refs
$isServer
$attrs
$listeners
特殊属性
key
ref
is
slot
slot-scope
scope
数据【实例方法】
$watch
$set
$delete
事件
$on
$once
$off
$emit
全局函数
Vue.extend
Vue.nextTick
Vue.set
Vue.delete
Vue.directive
Vue.filter
Vue.component
Vue.use
Vue.mixin
Vue.compile
Vue.observable
Vue.version
数据【选项】
data
props
propsData
computed
methods
watch
DOM
el
template
render
renderError
指令
v-text
v-html
v-show
v-if
v-else
v-else-if
v-for
v-on
v-bind
v-model
v-slot
v-pre
v-cloak
v-once
生命周期
$mount
$forceUpdate
$nextTick
生命周期调用方法
beforeCreate
created
beforeMount
Mounted
beforeUpdate
updated
activated
deactivated
beforeDestroy
destroyed
errorCaptured
资源
directives
filters
components
组件
Component
transition
transition-group
keep-alive
slot
组合
parent
mixins
extends
provide/inject
其它
name
delimiters
functional
model
inheritAttrs
comments
API全称为Application Programming Interface,即应用程序接口。
Vue.config 是一个对象,包含 Vue 的全局配置。可以在启动应用之前修改其中的一些属性。
是否 取消 Vue 所有的日志与警告,默认值为false。
自定义合并策略的选项,默认值为{}。
是否 允许 vue-devtools 检查代码,开发版本默认值为 true,生产版本默认值为 false。
生产版本设为 true 可以启用检查。
指定组件的渲染和观察期间未捕获错误的处理函数。这个处理函数被调用时,可获取错误信息和 Vue 实例。
用法:
Vue.config.errorHandler = function (err, vm, info) {
// handle error
// `info` 是 Vue 特定的错误信息,比如错误所在的生命周期钩子
// 只在 2.2.0+ 可用
}
为 Vue 的运行时警告赋予一个自定义处理函数。注意这只会在开发者环境下生效,在生产环境下它会被忽略。
使 Vue 忽略在 Vue 之外的自定义元素 【使用了 Web Components APIs】。
给 v-on 自定义键位别名。
是否 在浏览器开发工具的性能/时间线面板中启用对组件初始化、编译、渲染和打补丁的性能追踪。默认为false。只适用于开发模式和支持 performance.mark API 的浏览器上。
是否 在 vue 启动时生成生产提示。默认为true。
Vue 实例观察的数据对象【object】。
Vue 实例代理了对其 data 对象 property 的访问。
当前组件接收到的 props 对象【object】。
Vue 实例代理了对其 props 对象 property 的访问。
Vue 实例使用的根 DOM 元素【Element】。
用于当前 Vue 实例的初始化选项【object】。
父实例,如果当前实例有的话【Vue instance(Vue 实例)】。
当前组件树的根 Vue 实例【Vue instance】。
如果当前实例没有父实例,此实例将会是其自己。
当前实例的直接子组件【Array
注意:
$children 并不保证顺序,也不是响应式的。所以在使用 $children 来进行数据绑定时,可以考虑使用一个数组配合 v-for 来生成子组件。
用来访问被插槽分发的内容【 [name: string]: ?Array
在使用渲染函数书写一个组件时,访问 vm.$slots 最有帮助。
注意:
插槽不是响应性的。如果需要一个组件可以在被传入的数据发生变化时重渲染,建议使用诸如 props 或 data 等响应性实例选项。
用来访问作用域插槽【[name: string]: props => Array
vm.$scopedSlots 在使用渲染函数开发一个组件时特别有用。
注意:从 2.6.0 开始,这个 property 有两个变化:
(1).作用域插槽函数现在保证返回一个 VNode 数组,除非在返回值无效的情况下返回 undefined。
(2).所有的 $slots 现在都会作为函数暴露在 $scopedSlots 中。在使用渲染函数时,不论当前插槽是否带有作用域,都推荐始终通过 $scopedSlots 访问它们。这不仅仅使得在未来添加作用域变得简单,也可以轻松迁移到所有插槽都是函数的 Vue 3。
一个对象【Object】,持有注册过 ref attribute 的所有 DOM 元素和组件实例。
当前 Vue 实例 是否 运行于服务器【boolean】。
包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)【[key: string]: string】。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。
包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器【[key: string]: Function | Array
它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。
key【number | string | boolean | symbol】主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能地尝试就地修改/复用相同类型元素的算法。而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。
有相同父元素的子元素必须有独特的 key,重复的 key 会造成渲染错误。
最常见的用例是结合 v-for。
key 也可以用于强制替换元素/组件而不是重复使用它。在如下场景时它可能会很有用:
1. 完整地触发组件的生命周期钩子。
2. 触发过渡。
ref【string】被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。
如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;
如果用在子组件上,引用就指向组件。
注意:
因为 ref 本身是作为渲染结果被创建的,在初始渲染的时候不能访问它们 。
$refs 不是响应式的,因此不应该试图用它在模板中做数据绑定。
is【string | Object (组件的选项对象)】用于动态组件且基于 DOM 内模板的限制来工作。
示例代码:
废弃。【string】用于标记往哪个具名插槽中插入子组件内容。
推荐改用 2.6.0 新增的 v-slot。
废弃。【function argument expression】用于将元素或组件表示为作用域插槽。
推荐改用v-slot。
移除。用于表示一个作为带作用域的插槽的 元素。
推荐改用v-slot。
语法:
vm.$watch( expOrFn, callback, [options] )
参数
options【object】
(1). deep【boolean】:是否监听对象内部值的变化。
(2). .immediate【boolean】:是否 立即以表达式的当前值触发回调。
观察 Vue 实例上的一个表达式或者一个函数计算结果的变化。回调函数得到的参数为新值和旧值。表达式只接受简单的键路径。对于更复杂的表达式,用一个函数取代。
vm.$watch 返回一个取消观察函数,用来停止触发回调。
示例代码:
{{id}}:{{str}}
注意:
在变更 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变更之前值的副本。
全局 Vue.set 的别名。返回值为设置的值。
语法:
vm.$set( target, propertyName/index, value )
全局 Vue.delete 的别名。
语法:
vm.$delete( target, propertyName/index )
监听当前实例上的自定义事件。事件可以由 vm.$emit 触发。回调函数会接收所有传入事件触发函数的额外参数。
语法:
vm.$on( event, callback )
监听一个自定义事件,但是只触发一次。一旦触发之后,监听器就会被移除。
语法:
vm.$once( event, callback )
移除自定义事件监听器。
语法:
vm.$off( [event, callback] )
参数
如果没有提供参数,则移除所有的事件监听器;
如果只提供了事件,则移除该事件所有的监听器;
如果同时提供了事件与回调,则只移除这个回调的监听器。
触发当前实例上的事件。附加参数都会传给监听器回调。
语法:
vm.$emit( eventName, […args] )
示例代码:
使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。
语法:
Vue.extend( options )
示例代码:
注意:
data 选项是特例,在 Vue.extend() 中它必须是函数。
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
语法:
Vue.nextTick( [callback, context] )
参数
callback【function】
context【object】
如果没有提供回调且在支持 Promise 的环境中,则返回一个 Promise。
示例代码:
// 修改数据
vm.msg = 'Hello'
// DOM 还没有更新
Vue.nextTick(function () {
// DOM 更新了
})
// 作为一个 Promise 使用
Vue.nextTick()
.then(function () {
// DOM 更新了
})
注意:
Vue 不自带 Promise polyfill,解决办法可参考 文档《Shim、Polyfill》。
向响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新 property,因为 Vue 无法探测普通的新增 property。
返回设置的值。
语法:
Vue.set( target, propertyName/index ,value)
参数
target【Object | Array】
propertyName【string】/index【number】
value【any】
注意:
目标对象不能是 Vue 实例,或者 Vue 实例的根数据对象。
删除对象的 property。如果对象是响应式的,确保删除能触发更新视图。这个方法主要用于避开 Vue 不能检测到 property 被删除的限制。
语法:
Vue.delete( target, propertyName/index )
注意:
目标对象不能是 Vue 实例,或者 Vue 实例的根数据对象。
注册或获取全局指令。
语法:
Vue.directive( id, [definition] )
参数
id【string】
definition【Function | Object】
注册或获取全局过滤器。可以在一个组件的选项中定义本地的过滤器,也可以在在创建 Vue 实例之前全局定义过滤器。当全局过滤器和局部过滤器重名时,会采用局部过滤器。
语法:
Vue.filter( id, [definition] )
示例代码:
// 注册
Vue.filter('my-filter', function (value) {
// 返回处理后的值
})
// getter,返回已注册的过滤器
var myFilter = Vue.filter('my-filter')
注册或获取全局组件。注册还会自动使用给定的 id 设置组件的名称。
语法:
Vue.component( id, [definition] )
示例代码:
// 注册组件,传入一个扩展过的构造器
Vue.component('my-component', Vue.extend({ /* ... */ }))
// 注册组件,传入一个选项对象 (自动调用 Vue.extend)
Vue.component('my-component', { /* ... */ })
// 获取注册的组件 (始终返回构造器)
var MyComponent = Vue.component('my-component')
安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。
语法:
Vue.use( plugin )
参数
plugin【Object | Function】
注意:
该方法需要在调用 new Vue() 之前被调用。
当 install 方法被同一个插件多次调用,插件将只会被安装一次。
全局注册一个混入,影响注册之后所有创建的每个 Vue 实例。插件作者可以使用混入,向组件注入自定义的行为。不推荐在应用代码中使用。
语法:
Vue.mixin( mixin )
参数
mixin【Object】
将一个模板字符串编译成 render 函数。只在完整版时可用。
语法:
Vue.compile( template )
参数
template【string】
示例代码:
让一个对象可响应。Vue 内部会用它来处理 data 函数返回的对象。
语法:
Vue.observable( object )
返回的对象可以直接用于渲染函数和计算属性内,并且会在发生变更时触发相应的更新。也可以作为最小化的跨组件状态存储器,用于简单的场景。
提供字符串形式的 Vue 安装版本号。这对社区的插件和组件来说非常有用,可以根据不同的版本号采取不同的策略。
示例代码:
Vue 实例的数据对象【Object | Function】。
Vue 会递归地把 data 的 property 转换为 getter/setter,从而让 data 的 property 能够响应数据变化。对象必须是纯粹的对象 (含有零个或多个的 key/value 对):浏览器 API 创建的原生对象,原型上的 property 会被忽略。大概来说,data 应该只能是数据 - 不推荐观察拥有状态行为的对象。
实例创建之后,可以通过 vm.$data 访问原始数据对象。Vue 实例也代理了 data 对象上所有的 property,因此访问 vm.a 等价于访问 vm.$data.a。
一旦观察过,就无法在根数据对象上添加响应式 property。因此推荐在创建实例之前,就声明所有的根级响应式 property。
注意:
props 【Array
如果props是对象,则允许配置高级选项,如类型检测、自定义验证和设置默认值。可以基于对象的语法使用以下选项:
示例代码:
// 简单语法
Vue.component('props-demo-simple', {
props: ['size', 'myMessage']
})
// 对象语法,提供验证
var vm2=Vue.component('props-demo-advanced', {
props: {
// 检测类型
height: Number,
// 检测类型 + 其他验证
age: {
type: Number,
default: 0,
required: true,
validator: function (value) {
return value >= 0
}
}
}
})
var c2=new vm2({
propsData:{
height:123,
age:23
}
})
propsData【[key: string]: any 】用于创建实例时传递 props【只用于 new 创建的实例中】。主要作用是方便测试。
计算【[key: string]: Function | { get: Function, set: Function }】属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。
示例代码:
注意:
如果为一个计算属性使用了箭头函数,则 this 不会指向这个组件的实例,不过仍然可以将其实例作为函数的第一个参数来访问。
methods【[key: string]: Function】 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。
示例代码:
注意:
不应该使用箭头函数来定义 method 函数 (例如 plus: () => this.a++)。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined。
这里watch【[key: string]: string | Function | Object | Array 】是一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个 property。
示例代码:
var vm = new Vue({
data: {
a: 1,
b: 2,
c: 3,
d: 4,
e: {
f: {
g: 5
}
}
},
watch: {
a: function (val, oldVal) {
console.log('new: %s, old: %s', val, oldVal)
},
// 方法名
b: 'someMethod',
// 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深
c: {
handler: function (val, oldVal) { /* ... */ },
deep: true
},
// 该回调将会在侦听开始之后被立即调用
d: {
handler: 'someMethod',
immediate: true
},
// 可以传入回调数组,它们会被逐一调用
e: [
'handle1',
function handle2 (val, oldVal) { /* ... */ },
{
handler: function handle3 (val, oldVal) { /* ... */ },
/* ... */
}
],
// watch vm.e.f's value: {g: 5}
'e.f': function (val, oldVal) { /* ... */ }
}
})
vm.a = 2 // => new: 2, old: 1
注意:
不应该使用箭头函数来定义 watcher 函数 。
【string | Element】提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标。可以是 CSS 选择器,也可以是一个 HTMLElement 实例。
在实例挂载之后,元素可以用 vm.$el 访问。
如果在实例化时存在这个选项,实例将立即进入编译过程,否则,需要显式调用 vm.$mount() 手动开启编译。
注意:
只在用 new 创建实例时生效。
一个模板【string】作为 Vue 实例的标识使用。模板将会替换挂载的元素。挂载元素的内容都将被忽略,除非模板的内容有分发插槽。
如果值以 # 开始,则它将被用作选择符,并使用匹配元素的 innerHTML 作为模板。常用的技巧是用
【string】更新元素的 textContent。如果要更新部分的 textContent,需要使用 {{ Mustache }} 插值。 示例代码: 【string】更新元素的 innerHTML。 内容按普通 HTML 插入 - 不会作为 Vue 模板进行编译。如果试图使用 v-html 组合模板,可以重新考虑是否通过使用组件来替代。 在单文件组件里,scoped 的样式不会应用在 v-html 内部,因为那部分 HTML 没有被 Vue 的模板编译器处理。如果针对 v-html 的内容设置带作用域的 CSS,可以替换为 CSS Modules 或用一个额外的全局 指令
v-text
{{msg}}
v-html