详解Vue的组件中data选项为什么必须是函数
官方解释
data必须是函数
构造Vue实例时传入的各种选项大多数都可以在组件里使用。只有一个例外:data必须是函数。实际上,如果你这么做:
Vue.component('my-component',{
template:'{{message}}',
data:{
message:'hello'
}
})
那么Vue会停止运行,并在控制台发出警告,告诉你在组件实例中data必须是一个函数。但理解这种规则为何存在也是很有益处的,所以让我们先作个弊:
=============以下为个人理解,如果有误,请指出,谢谢指教
Vue.component('xxx',{ template:'{{counter}}', data:function(){ returncounter=0; } })
Vue在注册到全局/局部并生成实例时,它是具有自己的作用域的,也就是说
在template字符串模板中如果存在一个变量名与VUE实例的变量名一致的时候,这个变量只会是组件中的变量,而不会是VUE的全局变量
比如
//以下代码中,组件中的count和Vue中的count是一样的变量名,但是在组件中只会显示0而不是2 Vue.component('simple-counter',{ template:'', data:function(){ returncount=0; } }); vm=newVue({ el:'#example-2', data:{ count:2 } })
以上代码从原型链上理解
varcomponent=function(){}//为了让组件有自己的作用域,它必须包含私有变量data,所以简单化的理解应该是这样的 varcomponent=function(){ this.data=this.data();//存在私有的data属性 } component.propotype.data=function(){ return{count:0} } //当我们在template中使用数据的时候,我们是调用的component的私有变量data //如果我们不以函数的形式处理又会如何呢? varcomponent=function(){ //不存在私有的data属性 } component.propotype.data={count:0} //此时,data不作为私有变量,就会有暴露的风险,而且,它指向的是{count:0}的引用,所以当重复创建组件的时候,component的data都指向了同一个引用。因此会相互影响。
如果不以原型链的形式处理,也可以不传入函数
functioncomponent(d){ this.data=d; } varcom=newcomponent({ count:1 }); varcom1=newcomponent({ count:1 });
总结
到此这篇关于详解Vue的组件中data选项为什么必须是函数的文章就介绍到这了,更多相关Vue组件中data选项是函数内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。