cari
Rumahhujung hadapan webView.jsVue.js中定义组件模板的几种方法介绍

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视频教程精选

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Vue.js中定义组件模板的几种方法介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:vuejsdevelopers. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Vue.js vs React: Skalabilitas dan KepercayaanVue.js vs React: Skalabilitas dan KepercayaanMay 10, 2025 am 12:24 AM

Vue.js dan bertindak balas masing -masing mempunyai kelebihan sendiri dalam skalabiliti dan kebolehkerjaan. 1) Vue.js mudah digunakan dan sesuai untuk projek kecil. API komposisi meningkatkan pemeliharaan projek besar. 2) React sesuai untuk projek -projek yang besar dan kompleks, dengan cangkuk dan peningkatan prestasi dan pemeliharaan maya, tetapi keluk pembelajaran lebih curam.

Masa Depan Vue.js dan React: Trend dan RamalanMasa Depan Vue.js dan React: Trend dan RamalanMay 09, 2025 am 12:12 AM

Trend masa depan dan ramalan Vue.js dan React adalah: 1) Vue.js akan digunakan secara meluas dalam aplikasi peringkat perusahaan dan telah membuat terobosan dalam penjanaan tapak dan penjanaan tapak statik; 2) React akan berinovasi dalam komponen pelayan dan pemerolehan data, dan terus mengoptimumkan model keserasian.

Frontend Netflix: menyelam mendalam ke dalam timbunan teknologinyaFrontend Netflix: menyelam mendalam ke dalam timbunan teknologinyaMay 08, 2025 am 12:11 AM

Tumpukan teknologi front-end Netflix terutamanya berdasarkan React dan Redux. 1. REACT digunakan untuk membina aplikasi satu halaman berprestasi tinggi, dan meningkatkan kebolehgunaan semula kod dan penyelenggaraan melalui pembangunan komponen. 2. Redux digunakan untuk pengurusan negeri untuk memastikan perubahan keadaan dapat diramalkan dan dapat dikesan. 3. Toolchain termasuk Webpack, Babel, Jest dan Enzyme untuk memastikan kualiti dan prestasi kod. 4. Pengoptimuman prestasi dicapai melalui segmentasi kod, pemuatan malas dan penyampaian sisi pelayan untuk meningkatkan pengalaman pengguna.

Vue.js dan frontend: Membina antara muka pengguna interaktifVue.js dan frontend: Membina antara muka pengguna interaktifMay 06, 2025 am 12:02 AM

Vue.js adalah rangka kerja progresif yang sesuai untuk membina antara muka pengguna yang sangat interaktif. Fungsi terasnya termasuk sistem responsif, pembangunan komponen dan pengurusan penghalaan. 1) Sistem responsif menyedari pemantauan data melalui objek.defineproperty atau proksi, dan secara automatik mengemas kini antara muka. 2) Pembangunan komponen membolehkan antara muka dibahagikan kepada modul yang boleh diguna semula. 3) Vuerouter menyokong aplikasi satu halaman untuk meningkatkan pengalaman pengguna.

Apakah kelemahan Vuejs?Apakah kelemahan Vuejs?May 05, 2025 am 12:06 AM

Kelemahan utama Vue.js termasuk: 1. Ekosistem adalah agak baru, dan perpustakaan dan alat pihak ketiga tidak kaya dengan rangka kerja lain; 2. Kurva pembelajaran menjadi curam dalam fungsi kompleks; 3. Sokongan dan sumber masyarakat tidak begitu luas seperti reaksi dan sudut; 4. Masalah prestasi boleh ditemui dalam aplikasi besar; 5. Peningkatan versi dan cabaran keserasian lebih besar.

Netflix: Melancarkan Rangka Kerja FrontendnyaNetflix: Melancarkan Rangka Kerja FrontendnyaMay 04, 2025 am 12:16 AM

Netflix menggunakan React sebagai kerangka depannya. 1. Pembangunan komponen REACT dan mekanisme DOM maya meningkatkan prestasi dan kecekapan pembangunan. 2. Gunakan Webpack dan Babel untuk mengoptimumkan pembinaan dan penggunaan kod. 3. Gunakan Segmentasi Kod, Rendering Sider Server dan Strategi Caching untuk Pengoptimuman Prestasi.

Pembangunan Frontend dengan Vue.js: Kelebihan dan TeknikPembangunan Frontend dengan Vue.js: Kelebihan dan TeknikMay 03, 2025 am 12:02 AM

Sebab -sebab populariti Vue.js termasuk kesederhanaan dan pembelajaran mudah, fleksibiliti dan prestasi tinggi. 1) Reka bentuk kerangka progresifnya sesuai untuk pemula untuk belajar langkah demi langkah. 2) Pembangunan berasaskan komponen meningkatkan kebolehkerjaan kod dan kecekapan kerjasama pasukan. 3) Sistem responsif dan DOM maya meningkatkan prestasi rendering.

Vue.js vs React: kemudahan penggunaan dan keluk pembelajaranVue.js vs React: kemudahan penggunaan dan keluk pembelajaranMay 02, 2025 am 12:13 AM

Vue.js lebih mudah digunakan dan mempunyai lengkung pembelajaran yang lancar, yang sesuai untuk pemula; React mempunyai lengkung pembelajaran yang lebih curam, tetapi mempunyai fleksibiliti yang kuat, yang sesuai untuk pemaju yang berpengalaman. 1.vue.js mudah dimulakan melalui reka bentuk pengikatan data mudah dan progresif. 2. REACT memerlukan pemahaman tentang DOM dan JSX maya, tetapi memberikan kelebihan fleksibiliti dan prestasi yang lebih tinggi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).