Vue元件的component中data屬性function傳物件和不穿的物件的區別(不同效果)
阿新 • • 發佈:2018-12-06
話不多說上程式碼測試:
定義一個全域性元件,繫結msg
- 我們首先看如果把data的值外傳不在元件裡面建立的效果
<body>
<div id="app">
<counter></counter>
<hr>
<counter></counter>
<hr>
<counter></counter>
</div>
<template id="temp">
<div >
<input type="button" value="加一" @click='increment'>
<h3>{{count}}</h3>
</div>
</template>
<script>
var dataObj={count:0}
Vue.component('counter',{
template:'#temp',
data:()=>{
return dataObj
},
methods: {
increment() {
this.count++
}
}
})
var vm=new Vue({
el:'#app',
data:{},
methods:{}
});
</script>
</body>
- 現在把dataObj註釋, return {count:0}
//var dataObj={count:0}
Vue.component('counter',{
template:'#temp',
data:()=>{
return {count:0}
},
methods:{
increment() {
this.count++
}
}
})
總結:
不難看出,這裡的關鍵點就在於 return {} 這個地方 如果是作用域外傳入物件的話,上面三個元件的click方法都是處理的這個外部物件裡面的count,所以他們作用於同樣一個變數,但是如果是 return {count : 0}的話是寫在template 內部的,所以每當你在page上渲染一個元件就會響應的建立一個count ,所以他們互不干預,在事件使用中我們可以根據這個小小的點實現不同需求的功能而省去多餘的程式碼