當我們有時候某個功能的重複運用性較高,但每次都還要再寫一個一模一樣的功能,是不是很麻煩呢?
那麼這時我們就可以好好利用 Vue 組件的功能,可以讓我們只寫一次,就能直接使用很多次,舉例來說,像是分頁的按鈕、導覽列等重複運用較高的,就會寫成組件
定義在 new Vue({}) 之外
<script>
    Vue.component('component-name', {
        template: `
            // 最外層指允只一個標籤
            <div>
                // 這裡為刻元件長怎樣的 html 架構
            </div>
        `,
        data() {
            return { }
        },
        methods:{ }
    });
    var app = new Vue({
        el: '#app',
        data: { }
    })
</script>
先從上面範例來看一下,組件的基本架構會長甚麼樣子?
透過 Vue.component(組件名稱,{ }) 的方式來建立
全局組件註冊的位置,必需在要被使用到的 new Vue({ }) 實例 之前,如果把上面 註冊component 的位置放在 new Vue({ }) 實例 之後則無法使用該組件
在創建組件時,會有一個地方 template 用來定義組件的 html 模板該長怎麼樣式,可以直接套用外面的 class
要注意,template 內只能有一個根節點,意指最外層只能有一個元素標籤
組件內 data 的寫法與一般我們在寫的不同,必需是一個函數,這樣才能讓每個被使用的組件有自己獨立的 data
data: {
  count: 0
}
data: function () {
  return {
    count: 0
  }
}
<div id="app">
    <my-component></my-component>
</div>
把組件名稱當成標籤使用即可
局部組件的註冊方式如下,會直接寫在 Vue 的實例內
<div id="app1">
    <child-component></child-component>
</div>
<script>
    new Vue({
        el: "#app1",
        components:{
            "child-component":{
                template:"<h1>我是局部组件</h1>"
            }
        }
    });
</script>
來做一個簡單的單純顯示各自累計 count 的組件吧
QQㄋㄟㄋㄟ好喝到咩噗茶
<script>
Vue.component("counter",{
    template:`
      <div>
        <button v-on:click='count += 1'>訂購</button> {{ count }} 杯
      </div>
    `,
    data() {
      return {
        count: 0
      }
    },
});
var app = new Vue({
  el: '#app',
  data:{},
})
</script>
把我們的組件樣式跟功能先寫完,再來就可以直接複用組件了
<div id="app">
  <div class="flexbox">
      QQㄋㄟㄋㄟ好喝到咩噗茶 : <counter></counter>
  </div>
  <div class="flexbox">
      3P奶茶 : <counter></counter>
  </div>
  <div class="flexbox">
      奶茶三兄弟 : <counter></counter>
  </div>
  <div class="flexbox">
      絕代雙Q奶茶 : <counter></counter>
  </div>
</div>
每一個組件的 count 就可以獨立出來了,畫面如下
Vue 官方文件
segmentfault, Vue组件之全局组件与局部组件