组件数据寄存
组件本人的数据寄存在哪里呢
- 组件对象有data,computed,methods
- 然而在应用这个data属性必须是一个函数
而且这个函数要返回一个对象,对象外部保留着数据
<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>
为什么data必须是函数
JavaScript对象是援用关系,所以如果return出的对象援用了内部的一个对象,那这个对象就是共享的的,任何一方批改都会同步。比方
<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对象来独立
<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>
应用函数返回新值,组件不会相互影响,不会引起连锁反应。