We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
vue实例的时候定义data属性既可以是一个对象,也可以是一个函数
vue
data
const app = new Vue({ el:"#app", // 对象格式 data:{ foo:"foo" }, // 函数格式 data(){ return { foo:"foo" } } })
组件中定义data属性,只能是一个函数,如果为组件data直接定义为一个对象
Vue.component('component1',{ template:`<div>组件</div>`, data:{ foo:"foo" } })
则会得到警告信息
警告说明:返回的data应该是一个函数在每一个组件实例中
上面讲到组件data必须是一个函数,不知道大家有没有思考过这是为什么呢?
在我们定义好一个组件的时候,vue最终都会通过Vue.extend()构成组件实例 ,这里我们模仿组件构造函数,定义data属性,采用对象的形式
function Component(){ } Component.prototype.data = { count : 0 }
创建两个组件实例
const componentA = new Component() const componentB = new Component()
修改componentA组件data属性的值,componentB中的值也发生了改变
componentA
componentB
console.log(componentB.data.count) // 0 componentA.data.count = 1 console.log(componentB.data.count) // 1
产生这样的原因这是两者共用了同一个内存地址,componentA修改的内容,同样对componentB产生了影响
如果我们采用函数的形式,则不会出现这种情况(函数返回的对象内存地址并不相同)
function Component(){ this.data = this.data() } Component.prototype.data = function (){ return { count : 0 } }
修改componentA组件data属性的值,componentB中的值不受影响
console.log(componentB.data.count) // 0 componentA.data.count = 1 console.log(componentB.data.count) // 0
vue组件可能会有很多个实例,采用函数返回一个全新data形式,使每个实例对象的数据不会受到其他实例对象数据的污染
The text was updated successfully, but these errors were encountered:
No branches or pull requests
一、实例和组件定义data的区别
vue
实例的时候定义data
属性既可以是一个对象,也可以是一个函数组件中定义
data
属性,只能是一个函数,如果为组件data
直接定义为一个对象则会得到警告信息
警告说明:返回的
data
应该是一个函数在每一个组件实例中二、组件data定义函数与对象的区别
上面讲到组件
data
必须是一个函数,不知道大家有没有思考过这是为什么呢?在我们定义好一个组件的时候,
vue
最终都会通过Vue.extend()构成组件实例,这里我们模仿组件构造函数,定义
data
属性,采用对象的形式创建两个组件实例
修改
componentA
组件data
属性的值,componentB
中的值也发生了改变产生这样的原因这是两者共用了同一个内存地址,
componentA
修改的内容,同样对componentB
产生了影响如果我们采用函数的形式,则不会出现这种情况(函数返回的对象内存地址并不相同)
修改
componentA
组件data
属性的值,componentB
中的值不受影响vue
组件可能会有很多个实例,采用函数返回一个全新data
形式,使每个实例对象的数据不会受到其他实例对象数据的污染参考文献
The text was updated successfully, but these errors were encountered: