data属性文档
转自:https://cn.vuejs.org/v2/api/#data
项目上,遇到的坑,加深印象
data
- 类型:
Object | Function
- 限制: 组件的定义只接受
function
。 - 详细:
Vue实例的数据对象。Vue将会递归将data的属性转换为getter/setter,从而让data的属性能够响应数据变化。对象必须是纯粹的对象(含有零个或多个的key/value对):浏览器API创建的原生对象,原型上的属性会被忽略。大概来说,data应该只能是数据-不推荐观察拥有状态行为的对象。
一旦观察过,不需要再次在数据对象上添加响应式属性。因此推荐在创建实例之前,就声明所有的根级响应式属性。
实例创建之后,可以通过vm.$data
访问原始数据对象。Vue实例也代理了data对象上所有的属性,因此访问vm.a
等价于访问vm.$data.a
。
以_
或$
开头的属性不会被Vue实例代理,因为它们可能和Vue内置的属性、API方法冲突。你可以使用例如vm.$data._property
的方式访问这些属性。
当一个组件被定义,data必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果data
仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供data函数,每次创建一个新实例后,我们能够调用data
函数,从而返回初始数据的一个全新副本数据对象。
如果需要,可以通过将vm.$data
传入JSON.parse(JSON.stringify(...))
得到深拷贝的原始数据对象。
- 示例:
var data = { a: 1 }
var vm = new Vue({
data: data
})
vm.a
vm.$data === data
var Component = Vue.extend({
data: function(){
return { a: 1 }
}
})
注意,如果你为data
属性使用了箭头函数,则this
不会指向这个组件的实例,不过你仍然可以将其实例作为函数的第一个参数来访问。
data: vm => ({ a: vm.myProp })