Vue組件之全局組件與局部組件


1全局注冊實例

 <div id="app">

     <com-btn></com-btn>

     <com-btn></com-btn>

 </div>

<script>

        Vue.component('com-btn',{

            data:function(){

                return{

                    num:0,

                }

            },

            template:`<button v-on:click='change'>點我{{num}}次</button>`,

            methods:{

                change:function(){

                    this.num += 1;

                }

            }

        })

       var vm = new Vue({

           el:'#app',

           data:{

           },        

       })

    </script>

我們在注冊一個組件的時候需要給他起一個名字比如com-btn,從上面的代碼我們可以看見

Vue.component('my-component-name', { /* ... */ })

這個組件名字就是我們注冊的這個組件com-btn的第一個參數.這個組件就是全局注冊的,在他們注冊之后,我們可以用在任何新創建的vue根實例(new Vue)里面。

值得注意的是所有組件必須寫在根實例的前面才會生效

 

2局部祖冊的實例

<script>

        var childcom ={

            data:function(){

                return{

                    num:0,

                }

            },

            template:`<button v-on:click='change'>點我{{num}}次</button>`,

            methods:{

                change:function(){

                    this.num += 1;

                }

            }

        }

       var vm = new Vue({

           el:'#app',

           data:{

 

           },

           components:{

               'com-btn':childcom,//調用這個組件

           }     

       })

    </script>

局部注冊的好處 就是當你使用的是webpack這樣的構建系統時,如果是用全局注冊的這種方法注冊的組件,那么當你不使用某一個組件的時候,它仍然會存在最終的構建結果之中,這就增加的無謂的js下載。

所以我們可以通過一個簡單的js對象來注冊組件

 

var ComponentA = { /* ... */ }

在需要使用這個組件時, 你只需要在你的你的根實例里面去調用這個定義的組件即可。

 

new Vue({

  el: '#app'

  components: {

    'component-a': ComponentA,

    'component-b': ComponentB

  }

})

值得注意的是根實例的屬性名字是components,千萬不要忘記s。組件中的其他屬性和實例的一樣但是data必須是一個函數。

對於components對象中的每個的屬性來說就是自定義組件的名字,屬性值就是這個組件的選項對象。

局部注冊的組件在其子組件中是不可用的,如果你希望componentA在componentB中可以使用那你需要下面這樣寫法:

var ComponentA = { /* ... */ }

var ComponentB = {

  components: {

    'component-a': ComponentA

  },

  // ...

}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM