組件本身的數據存放在哪裏呢app
並且這個函數要返回一個對象,對象內部保存着數據函數
<div id="app"> <mycpn></mycpn> </div> <script> Vue.component('mycpn', { template: '<div>{{message}}</div>', data: function() { return { message: '組件內容' } } }); var app = new Vue({ el: '#app' }) </script>
JavaScript對象是引用關係,因此若是return出的對象引用了外部的一個對象,那這個對象就是共享的的,任何一方修改都會同步。好比code
<div id="app"> <mycpn></mycpn> <mycpn></mycpn> <mycpn></mycpn> </div> <script> var data = { counter: 0 }; Vue.component('mycpn', { template: '<button @click="counter++">{{counter}} </button>', data: function() { return data; } }); var app = new Vue({ el: '#app' }) </script>
組件使用了三次。可是點擊任意一個<button>,三個的數字都會加1,那是由於組件的data引用的是外部的對象,這確定不是咱們指望的效果,因此給組件返回一個新的data對象來獨立component
<div id="app"> <mycpn></mycpn> <mycpn></mycpn> <mycpn></mycpn> </div> <script> var data = { counter: 0 }; Vue.component('mycpn', { template: '<button @click="counter++">{{counter}}</button>', data: function() { return { counter: 0 //返回新值,不會相互影響 } } }); var app = new Vue({ el: '#app' }) </script>
使用函數返回新值,組件不會相互影響,不會引發連鎖反應。對象