这篇文章给大家分享的是有关Vue组件中的data必须是一个function的原因是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
组件可以有自己的data,并且data必须是一个function。
在下面这个例子中,data 返回了一个在外部定义的对象。并且这个组件在页面中使用了3次,点击+1时出现了如下情况:data中的count属性影响到了所有实例。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="../css/bootstrap.css" rel="external nofollow" >
<style type="text/css">
#app{
margin:20px;
}
</style>
</head>
<body>
<div id='app'>
<counter></counter>
<counter></counter>
<counter></counter>
</div>
<template id="tmp1">
<div>
<input type="button" value="+1" @click="increment">
<h2>{{count}}</h2>
</div>
</template>
</body>
<script src="../lib/vue.js"></script>
<script>
var dataObj = {count:0}
//这是一个计数器组件,每当点击按钮,让data中的count值加1
Vue.component('counter',{
template:'#tmp1',
data:function(){
return dataObj
},
methods:{
increment(){
this.count++
}
}
})
var vm = new Vue({
el:'#app',
})
</script>
</html>
而当data选项是一个函数的时候,每个实例可以维护一份被返回对象的独立的拷贝,这样各个实例中的data不会相互影响,是独立的。
Vue.component('counter',{
template:'#tmp1',
data:function(){
return {count:0}
},
methods:{
increment(){
this.count++
}
}
})
补充:下面看下vue组件中data必须是一个函数的原因
vue组件中data值不能为对象,因为对象是引用类型,组件可能会被多个实例同时引用。如果data值为对象,将导致多个实例共享一个对象,其中一个组件改变data属性值,其它实例也会受到影响。
上面解释了data不能为对象的原因,这里我们简单说下data为函数的原因。data为函数,通过return 返回对象的拷贝,致使每个实例都有自己独立的对象,实例之间可以互不影响的改变data属性值。
data为函数的示例:
data:function(){
return {
k1: 'v1',
k2: 'v2',
...
}
}
感谢各位的阅读!关于“Vue组件中的data必须是一个function的原因是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。