1. 程式人生 > 實用技巧 >Vue-元件(一)

Vue-元件(一)

元件是可複用的vue例項,並且帶有一個名字;可以在Vue根例項中定義,在html中呼叫

元件註冊:可分為全域性註冊和區域性註冊

  全域性註冊:

    Vue.component('元件名1',{

      data:function(){  //data必須是函式的形式

        return{count:0}

      },

      template:'<div>Thsi is my Component</div>'

    })

  區域性註冊:

    const Component = {

      templata:'<div>This is my Component</div>'

    }

  區域性註冊的元件在其子元件中不可用,可使用以下方法:

    const Component_3={

  components:{     '元件名2':component   }, template:'<div>\ <h2>thisiscomponent_3Star</h2>\ <component_2></component_2>\ <h2>thisiscomponent_3End</h2>\ </div>'     }

    在Vue根例項中:

      components:{

        '元件名2' : component

      }

    通過babel和webpack來使用:

      import component from './component.vue'

      export default{

        components:{

          component

        },

        //...

      }

元件呼叫:在html裡Vue繫結的標籤中要放入元件的位置

  <元件名1></元件名1>

  <元件名2></元件名2>

ps:元件名字使用駝峰命名,呼叫時使用‘大寫前加-,大寫改小寫的’寫法也是可以的 如:元件名:ComtName呼叫:<ComName>或<Com-name> 直接在DOM中使用時只有Com-name有效

  

Prop:prop是元件上註冊的自定義的attribute,當一個值傳遞給一個prop attribute的時候,它變成了那個元件例項的一個property

元件的使用比較複雜,可使用例項檢視:

 1 <div>
 2         <div id="app2">
 3             <!-- prop是元件上註冊的自定義的attribute,
 4                 當一個值傳遞給一個prop attribute的時候,
 5                 它變成了那個元件例項的一個property
 6             -->
 7             <component_4 title="This is prop4_1"></component_4>
 8             <component_4 title="This is prop4_2"></component_4>
 9             <component_4 title="This is prop4_3"></component_4>
10             <!--每個元件只能有一個根目錄, 
11                 當想傳入多個數據時,可將資料以陣列形式寫入data內,
12                 用v-for遍歷,v-bind繫結陣列,之後在元件中的props呼叫
13                 元件中的資料就可以呼叫data中陣列的值
14             -->
15             <component_5 v-for="post in posts1" :keys="post.id" :title="post.value" ></component_5>
16             <component_6 v-for="post in posts2" :key="post.id" :post="post"></component_6>
17             <!--可直接寫入屬性,如類,樣式
18                 
19             -->
20             <component_7 class="this" style="color:blue"></component_7>
21         </div>
22         <script>
23             Vue.component('component_4',{
24                 props:['title'],
25                 template:'<h2>{{title}}</h2>'
26             })
27             Vue.component('component_5',{
28                 props:['title','keys'],
29                 template:'<h2>This is {{keys}}  No.{{title}}</h2>'
30             })
31             Vue.component('component_6',{
32                 props:['post'],
33                 template:'<h2>this is {{post.id}} , No.{{post.value}}</h2>'
34             })
35             Vue.component('component_7',{
36                 // 如不想繼承元件的屬性,可使用:inheritAttrs:flase
37                 template:'<h2>this is Component_7</h2>'
38             })
39             new Vue({
40                 el:"#app2",
41                 data:{
42                     posts1:[
43                         {id:'5-1',value:'prop5_1'},
44                         {id:'5-2',value:'prop5_2'},
45                         {id:'5-3',value:'prop5_3'}
46                     ],
47                     posts2:[
48                         {id:'6-1',value:'prop6_1'},
49                         {id:'6-2',value:'prop6_2'},
50                         {id:'6-3',value:'prop6_3'}
51                     ]
52                 }
53             })
54         </script>
55     </div>