1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 <script src="../../vue.js"></script>
7 </head>
8 <body>
9 <!--
10
11 为什么在Vue.component({})中使用data必须是函数?
12 在JS中,产生一个对象是通过构造函数来产生的
13 并且通过构造函数产生的对象都是新的对象
14 在实例化组件中,data每次调用组件都是产生一个新的组件
15 Vue.component('vue-div',{
16 template:'#vue-div',
17 data(){
18 return{ //这里每次调用组件都会产生一个新的组件
19 message:'西门吹雪'
20 }
21 }
22 })
23 -->
24 <div id="app">
25 <!--添加多个,每个都是独立的,不受其它影响-->
26 <!--验证counter没有被共享-->
27 <!--所以data()必须以一个函数的形式返回出来-->
28 <my-btn></my-btn>
29 <my-btn></my-btn>
30 <my-btn></my-btn>
31 <my-btn></my-btn>
32 </div>
33 <!-- 1.注册一个组件-->
34 <template id="my_btn">
35 <button @click="counter += 1">点击的次数{{counter}}</button>
36 </template>
37
38 </body>
39 <script>
40 //如果data是一个对象,那么所有的将会被共享,
41 // 无论产生多少个组件,都是对应一样的值
42 //这就是data必须是函数的原因
43 // let data = {
44 // counter:0
45 // };
46 // data(){
47 // return data;
48 // }
49
50 //2.实例化组件
51 Vue.component('my-btn',{
52 template:'#my_btn',
53 data(){
54 return{
55 counter:0 //通过组件构造器产生出来的组件都是单独的,里面的这个counter不能共享,因为都是通过data函数来一个一个产生的,
56 }
57 }
58 })
59
60
61 var vm = new Vue({
62 el:'#app',
63 data:{}
64 })
65 </script>
66 </html>