vue组件化的最重要特点就是可复用性,如果data是对象,每个实例调用时数据所存储的位置都是相同的,一个实例中数据的更改其余的也会更改。使用函数调用时就会重新分配一个地址,各数据之间就没有关联。
<body>
<div id="app">
<cpn1></cpn1>
<cpn1></cpn1>
<cpn1></cpn1>
<br>
<cpn2></cpn2>
<cpn2></cpn2>
<cpn2></cpn2>
</div>
<template id="cpn1">
<div>
<button type="button" @click="count++">+</button>
<span2>{{count}}</span2>
<button type="button" @click="count--">-</button>
</div>
</template>
<template id="cpn2">
<div>
<button type="button" @click="count++">+</button>
<span2>{{count}}</span2>
<button type="button" @click="count--">-</button>
</div>
</template>
<script>
let obj = {
count: 0
};
const vm = new Vue({
el: "#app",
data() {
return {
}
},
components: {
cpn1: {
template: "#cpn1",
data(){
return obj
}
},
cpn2: {
template: "#cpn1",
data() {
return {
count: 0
}
}
}
}
})
</script>
</body>
组件中data写成对象会报错,简单模拟一下,第一个返回一个对象,第二个是具体的值。返回对象的就会因为是同一个地址而发生相互影响。