首頁 >web前端 >Vue.js >Vue.js中定義元件範本的幾種方法介紹

Vue.js中定義元件範本的幾種方法介紹

PHPz
PHPz轉載
2020-09-25 15:46:572760瀏覽

Vue.js中定義元件範本的幾種方法介紹

Vue.js 使用了基於 HTML 的模板語法,允許開發者宣告式地將 DOM 綁定至底層 Vue 實例的資料。所有 Vue.js 的範本都是合法的 HTML ,所以能被遵循規範的瀏覽器和 HTML 解析器解析。

在Vue中定義元件模板有很多選擇。在我看來,至少有七種不同的方式:

  • 字串

  • #模板文字

  • #X-Templates

  • 內聯

  • #渲染功能

  • JSX

  • 單頁元件

在本文中,我們將逐一介紹每種方法的範例,並討論其優缺點,以便您了解在任何特定情況下使用哪種方法最好。

1、字串

預設情況下,範本將定義為JS檔案中的字串。我想我們都同意字串中的模板是非常難以理解的。除了廣泛的瀏覽器支援之外,這個方法沒有什麼特別之處。

Vue.component('my-checkbox', {
	template: `<div class="checkbox-wrapper" @click="check">
	<div :class="{ checkbox: true, checked: checked }">
	</div><div class="title">{{ title }}</div></div>`,
	data() {
		return { checked: false, title: &#39;Check me&#39; }
	},
	methods: {
		check() { this.checked = !this.checked; }
	}
});

2、模板文字

#ES6模板字面量(“backticks”)允許您跨多行定義模板,這是在常規Javascript字串中無法做到的。雖然為了安全起見,您可能仍然應該轉換為ES5,但現在許多新瀏覽器都支援這些命令,並且更容易閱讀。

不過,這種方法並不完美;我發現大多數ide在語法高亮、製表符、換行等方面仍然讓您感到痛苦。

Vue.component(&#39;my-checkbox&#39;, {
    template: ` < div class = "checkbox-wrapper"@click = "check" > 
    <div: class = "{ checkbox: true, checked: checked }" ></div>
							<div class="title">{{ title }}</div ></div>`,
	data() {
		return { checked: false, title: &#39;Check me&#39; }
	},
	methods: {
		check() { this.checked = !this.checked; }
	}
});/

3、X-Templates

使用此方法,您的範本將在index.html檔案中的腳本標記中定義。腳本標記由文字/x-template標記,並由元件定義中的id引用。

我喜歡這種方法,它允許您用正確的HTML標記編寫HTML,但缺點是它將模板與元件定義的其餘部分分開。

Vue.component(&#39;my-checkbox&#39;, {
	template: &#39;#checkbox-template&#39;,
	data() {
		return { checked: false, title: &#39;Check me&#39; }
	},
	methods: {
		check() { this.checked = !this.checked; }
	}
});
<script type="text/x-template" id="checkbox-template">
	<div class="checkbox-wrapper" @click="check">
		<div :class="{ checkbox: true, checked: checked }"></div>
		<div class="title">{{ title }}</div>
	</div>
</script>

4、內嵌模板

#透過將inline-template屬性,您可以向Vue表明內部內容是其模板,而不是將其視為分散式內容。

它的缺點與x-templates相同,但一個優點是內容在HTML範本中的正確位置,因此可以在頁面載入時呈現,而不是等到Javascript執行時。

Vue.component(&#39;my-checkbox&#39;, {
	data() {
		return { checked: false, title: &#39;Check me&#39; }
	},
	methods: {
		check() { this.checked = !this.checked; }
	}
});
<my-checkbox inline-template>
	<div class="checkbox-wrapper" @click="check">
		<div :class="{ checkbox: true, checked: checked }"></div>
		<div class="title">{{ title }}</div>
	</div>
</my-checkbox>

5、渲染功能

呈現函數要求您將模板定義為Javascript物件。它們顯然是模板選項中最冗長和抽象的。

但是,這樣做的好處是模板更接近編譯器,並且允許您存取完整的Javascript功能,而不是指令提供的子集。

Vue.component(&#39;my-checkbox&#39;, {
	data() {
		return { checked: false, title: &#39;Check me&#39; }
	},
	methods: {
		check() { this.checked = !this.checked; }
	},
	render(createElement) {
		return createElement(
			&#39;div&#39;,
		  	{
					attrs: {
						&#39;class&#39;: &#39;checkbox-wrapper&#39;
					},
					on: {
						click: this.check
					}
		  	},
		  	[
		    	createElement(
	      		&#39;div&#39;,
	      		{
	        		&#39;class&#39;: {
	        			checkbox: true,
	        			checked: this.checked
        			}
	      		}
		    	),
		    	createElement(
	      		&#39;div&#39;,
	      		{
	        		attrs: {
	          		&#39;class&#39;: &#39;title&#39;
	        		}
	      		},
	      		[ this.title ]
		    	)
		  	]
		);
	}
});

6、JSX

Vue中最有爭議的範本選項是JSX。有些開發人員認為JSX醜陋、不直觀,是對Vue精神的背叛。

JSX要求您先轉換,因為瀏覽器無法讀取它。但是,如果需要使用呈現函數,JSX肯定是定義模板的一種不那麼抽象的方法。

Vue.component(&#39;my-checkbox&#39;, {
	data() {
		return { checked: false, title: &#39;Check me&#39; }
	},
	methods: {
		check() { this.checked = !this.checked; }
	},
	render() {
		return <div class="checkbox-wrapper" onClick={ this.check }>
		         <div class={{ checkbox: true, checked: this.checked }}></div>
		         <div class="title">{ this.title }</div>
		       </div>
	}
});

7、單一檔案元件

#只要您對在設定中使用建置工具感到滿意,單一檔案元件就是範本選項之王。它們帶來了兩方面的好處:允許您在編寫標記的同時將所有元件定義保存在一個檔案中。

它們需要換位,而且有些ide不支援這種檔案類型的語法高亮顯示,但在其他方面很難打敗它們。

<template>
  <div class="checkbox-wrapper" @click="check">
    <div :class="{ checkbox: true, checked: checked }"></div>
    <div class="title">{{ title }}</div>
  </div>
</template>
<script>
  export default {
    data() {
      return { checked: false, title: &#39;Check me&#39; }
    },
    methods: {
      check() { this.checked = !this.checked; }
    }
  }
</script>

您可能會爭辯說,有更多的模板定義的可能性,因為您可以使用模板預處理程序,例如Pug與SFCs!

哪個最好?

當然沒有一種完美的方式,每一種都應該根據你的用例來判斷。我認為最好的開發人員會意識到所有可能性,並將每個開發人員作為他們的Vue.js工具帶中的工具!

英文原文網址:https://vuejsdevelopers.com/2017/03/24/vue-js-component-templates/

相關推薦:

2020年前端vue面試題大匯總(附答案)

vue教學推薦:2020最新的5個vue.js影片教學精選

更多程式相關知識,請造訪:程式設計入門! !

以上是Vue.js中定義元件範本的幾種方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:vuejsdevelopers.com。如有侵權,請聯絡admin@php.cn刪除