<body>
<div id="app">
<counter></counter>
</div>
<template id="temp1">
<div>
<input type="button" value="+1" @click="increment">
<h3>{{count}}</h3>
</div>
</template>
<script type="text/javascript">
var dataObj = {count: 0};
Vue.component('counter',{
template:'#temp1',
data(){
return dataObj
},
methods:{
increment() {
this.count++
}
}
})
var vm = new Vue({
el: "#app",
data:{},
methods: {}
})
</script>
</body>
分析如上代碼:
1、首先創建一個名字為counter的組件,data函數中返回一個外部定義的對象的值,如果直接給data屬性設置一個對象而不是函數,那么會在瀏覽器中直接報錯
2、在瀏覽器中運行代碼

每次點擊+1按鈕,下邊的值就會加一
3、如果我們在頁面上同時使用三個counter組件
<div id="app">
<counter></counter>
<hr>
<counter></counter>
<hr>
<counter></counter>
<hr>
</div>
然后在瀏覽器中再次瀏覽

點擊任意一個+1按鈕,三個數同時變化。因為它們都指向了同一個對象。我們當然希望點擊不同的按鈕只實現當前組件內數據的變化,那么,我們在函數中返回一個對象,每次創建一個組建的時候,在內存中同時開辟一塊空間給當前組件存放data,這樣,就不會出現共用一個data的現象。我們只需將如上代碼進行一點更改
data: function (){ //return dataObj return{ count:0 } },

