聊一聊Vue組件模版,你知道它有幾種定義方式嗎?

前端組件化開發已是一個老生常談的話題了,組件化讓咱們的開發效率以及維護成本帶來了質的提高。前端

固然由於如今的系統愈來愈複雜龐大,因此開發與維護成本就變得必需要考慮的問題,所以滋生出了目前的三大前端框架 Vue、Angular、React。編程

那今天咱們就來看看 Vue 中有哪些定義組件模版的方式以及他們之間的一些差異。瀏覽器

1.字符串形式

Vue 最簡單直接的一種定義組件模版的方式,可是方式寫起來很不友好,就像咱們之前拼接 HTML 元素是同樣的,很痛苦,因此咱們並不經常使用bash

Vue.component("my-button", {
  data: function () {
    return {
      label: "是兄弟就來砍我"
    }
  },
  template: "<button>{{label}}</button>"
});
複製代碼

2.模版字面量

模版字面量 ES6 語法,與字符串不一樣的是,咱們能夠進行多行書寫,相對單純字符串有很大優點,體驗更優,可是可能瀏覽器兼容性會存在問題,須要進行轉譯爲 ES5 語法。前端框架

Vue.component("my-content", {
  data: function () {
    return {
      label: "是兄弟就來砍我",
      content: "刀刀暴擊"
    }
  },
  template: `
    <div>
      <button>{{ label }}</button>
      <span>{{ content }}</span>
    </div>
  `
});
複製代碼

3.內聯模版(inline-template)

與 「X-template」模版定義方式被稱爲模版定義的替代品,把內容定義在組件標籤元素的內部,而不是做爲 slot 內容分發,方式比較靈活,可是給讓咱們組件的模版與其餘屬性分離開。框架

<my-label inline-template>
  <span>{{label}}</span>
</my-label>
Vue.component('my-label', {
  data: function () {
    return {
      label: "趕忙上車吧,兄die"
    }
  }
})
複製代碼

4.X-template

定義一個<script>標籤,標記text/x-template 類型,經過 id 連接。函數

<script type="text/x-template" id="label-template">
    <span>{{label}}</span>
</script>
Vue.component('my-label', {
  template: "#label-template",
  data: function () {
    return {
      label: "趕忙上車吧,兄die"
    }
  }
})
複製代碼

5.渲染函數

渲染函數須要 JavaScript 徹底的編程能力,並且比模版更接近編譯,但須要咱們很是熟悉 Vue的實例屬性,也會更加的抽象。像 v-if v-for 指令就能夠用 JavaScript 語法輕鬆實現。工具

Vue.component('my-label', {
  data: function () {
    return {
      items: ['來就送!', '來就送!', '來就送!']
    }
  },
  render: function (createElement) {
    if (this.items.length) {
      return createElement('ul', this.items.map(function (item) {
        return createElement('li', item)
      }))
    } else {
      return createElement('p', '活動結束')
    }
  }
})
複製代碼

6.JSX

相比渲染函數的抽象而言,JSX 比較容易一些,對於熟悉 React 的同窗是比較友好的。組件化

Vue.component('my-label', {
  data: function () {
    return {
      label: ["活動結束"]
    }
  },
  render(){
    return <div>{this.label}</div>
  }
})
複製代碼

7.單文件組件

使用構建工具 cli 建立項目,綜合來看單文件組件應該是最好的定義組件的方式,並且不會帶來額外的模版語法的學習成本。學習

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">{{item}}</li>
    </ul>
  </div>
</template>
<script>
export default {
  data() {
    return {
      items: ["我砍", "我砍", "我砍"]
    };
  }
};
</script>
複製代碼

以上就是 Vue 中能夠定義組件模版的幾種方式,有人可能說,我特麼要知道這麼多幹嗎,只要一種不就好了,我想說兄die多知道幾種能夠幫助咱們在不一樣的條件下作出更好的選擇。

好比:你就須要開發一個簡單的頁面,你非要弄個單文件組件,腳手架跑起來,何須呢,你說對不。

相關文章
相關標籤/搜索