検索
ホームページウェブフロントエンドVue.jsVue.js でコンポーネント テンプレートを定義するいくつかの方法の紹介

Vue.js でコンポーネント テンプレートを定義するいくつかの方法の紹介

Vue.js は、開発者が基礎となる Vue インスタンスのデータに DOM を宣言的にバインドできるようにする HTML ベースのテンプレート構文を使用します。すべての Vue.js テンプレートは正当な HTML であり、仕様に準拠するブラウザおよび HTML パーサーで解析できます。

Vue にはコンポーネント テンプレートを定義するためのオプションが多数あります。少なくとも 7 つの異なる方法があるように思えます:

  • String

  • Template Literal

  • X テンプレート

  • インライン

  • レンダリング関数

  • 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 テンプレート リテラル (「バックティック」) を使用すると、複数行にわたってテンプレートを定義できます。これは通常の 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-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 属性をコンポーネントに追加することで、次のことを示すことができます。内部コンテンツを分散コンテンツとして考えるのではなく、そのテンプレートであると考えます。


x-template と同じ欠点がありますが、利点の 1 つは、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. 単一ファイル コンポーネント

セットアップでビルド ツールを使い慣れている限り、単一ファイル コンポーネントが最も重要です。テンプレート オプションの 。これらは両方の長所をもたらし、すべてのコンポーネント定義を 1 つのファイルに保持しながらマークアップを作成できます。 これらは転置を必要とし、一部の 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 と SFC のようなテンプレート プリプロセッサを使用できるため、より多くのテンプレート定義の可能性があると主張するかもしれません!

どちらが最適ですか?

もちろん、完璧な方法はありません。それぞれの方法はユースケースに基づいて判断する必要があります。最高の開発者はすべての可能性を認識し、各開発者を Vue.js ツール ベルトのツールにしていると思います。

英語の元のアドレス: https://vuejsdevelopers.com/2017/03/24/vue-js-component-templates/

関連する推奨事項:

2020 年のフロントエンド vue インタビューの質問の概要 (回答付き)


vue チュートリアルの推奨事項: 最新の 5 つの vue.js ビデオ チュートリアル2020 年厳選

プログラミング関連の知識については、

プログラミング入門をご覧ください。 !

以上がVue.js でコンポーネント テンプレートを定義するいくつかの方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はvuejsdevelopersで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
总结分享几个 VueUse 最佳组合,快来收藏使用吧!总结分享几个 VueUse 最佳组合,快来收藏使用吧!Jul 20, 2022 pm 08:40 PM

VueUse 是 Anthony Fu 的一个开源项目,它为 Vue 开发人员提供了大量适用于 Vue 2 和 Vue 3 的基本 Composition API 实用程序函数。本篇文章就来给大家分享几个我常用的几个 VueUse 最佳组合,希望对大家有所帮助!

5 款适合国内使用的 Vue 移动端 UI 组件库5 款适合国内使用的 Vue 移动端 UI 组件库May 05, 2022 pm 09:11 PM

本篇文章给大家分享5 款适合国内使用的 Vue 移动端 UI 组件库,希望对大家有所帮助!

聊聊Vue3+qrcodejs如何生成二维码并添加文字描述聊聊Vue3+qrcodejs如何生成二维码并添加文字描述Aug 02, 2022 pm 09:19 PM

Vue3如何更好地使用qrcodejs生成二维码并添加文字描述?下面本篇文章给大家介绍一下Vue3+qrcodejs生成二维码并添加文字描述,希望对大家有所帮助。

手把手带你利用vue3.x绘制流程图手把手带你利用vue3.x绘制流程图Jun 08, 2022 am 11:57 AM

利用vue3.x怎么绘制流程图?下面本篇文章给大家分享基于 vue3.x 的流程图绘制方法,希望对大家有所帮助!

如何使用VueRouter4.x?快速上手指南如何使用VueRouter4.x?快速上手指南Jul 13, 2022 pm 08:11 PM

如何使用VueRouter4.x?下面本篇文章就来给大家分享快速上手教程,介绍一下10分钟快速上手VueRouter4.x的方法,希望对大家有所帮助!

聊聊vue指令中的修饰符,常用事件修饰符总结聊聊vue指令中的修饰符,常用事件修饰符总结May 09, 2022 am 11:07 AM

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

Github 上 8 个不可错过的 Vue 项目,快来收藏!!Github 上 8 个不可错过的 Vue 项目,快来收藏!!Jun 17, 2022 am 10:37 AM

本篇文章给大家整理分享8个GitHub上很棒的的 Vue 项目,都是非常棒的项目,希望当中有您想要收藏的那一个。

如何覆盖组件库样式?React和Vue项目的解决方法浅析如何覆盖组件库样式?React和Vue项目的解决方法浅析May 16, 2022 am 11:15 AM

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、