vue.js組件的全局註冊和局部註冊詳解

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
  },
  // ...
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章