Vueコンポーネントの基本のまとめ

Vueコンポーネントの基本のまとめ

コンポーネントの基本

1 コンポーネントの再利用

コンポーネントは再利用可能な Vue インスタンスです。

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<ボタン カウンター></ボタン カウンター>
			<ボタン カウンター></ボタン カウンター>
			<ボタン カウンター></ボタン カウンター>
		</div>
  <スクリプト>
			// button-counterという新しいコンポーネントを定義します Vue.component('button-counter', {
				データ: 関数 () {
					戻る {
						カウント: 0
					}
				},
				テンプレート: '<button v-on:click="count++">{{ count }} 回クリックしました。</button>'
			});

			新しい Vue({ el: '#app' });
  </スクリプト>
 </本文>
</html>

ボタンをクリックすると、各コンポーネントのカウントが個別に維持されることに注意してください。ここで、カスタム コンポーネントのデータ プロパティは関数である必要があり、各インスタンスは返されたオブジェクトの独立したコピーを保持します。

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<ボタン カウンター></ボタン カウンター>
			<ボタン カウンター></ボタン カウンター>
			<ボタン カウンター></ボタン カウンター>
		</div>
  <スクリプト>
			var ボタンカウンタデータ = {
				カウント: 0
			}
			// button-counterという新しいコンポーネントを定義します Vue.component('button-counter', {
				データ: 関数 () {
					戻るボタンCounterData
				},
				テンプレート: '<button v-on:click="count++">{{ count }} 回クリックしました。</button>'
			});

			新しい Vue({ el: '#app' });
  </スクリプト>
 </本文>
</html>

2 Propsを介して子コンポーネントにデータを渡す

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<blog-post title="Vue との旅"></blog-post>
			<blog-post title="Vue を使用したブログ作成"></blog-post>
			<blog-post title="Vue が楽しい理由"></blog-post>
		</div>
  <スクリプト>
			Vue.component('ブログ投稿', {
				プロパティ: ['タイトル'],
				テンプレート: '<h3>{{ title }}</h3>'
			})

			新しい Vue({ el: '#app' });
  </スクリプト>
 </本文>
</html>

ここで、 <blog-post>コンポーネントはカスタム属性titleを介してデータを渡します。
v-bindを使用して props を動的に渡すことができます。

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<blog-post v-for="投稿内の投稿" v-bind:key="post.id" v-bind:title="post.title"></blog-post>
		</div>
  <スクリプト>
			Vue.component('ブログ投稿', {
				プロパティ: ['タイトル'],
				テンプレート: '<h3>{{ title }}</h3>'
			})

			新しいVue({
				el: '#app',
				データ: {
					投稿:
						{ id: 1, title: 'Vue との旅' },
						{ id: 2, title: 'Vue でブログを書く' },
						{ id: 3, title: 「なぜ Vue は楽しいのか」 }
					]
				}
			});
  </スクリプト>
 </本文>
</html>

3 単一のルート要素

各コンポーネントにはルート要素が 1 つだけ必要です。

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<blog-post v-for="post in posts" v-bind:key="post.id" v-bind:post="post"></blog-post>
		</div>
  <スクリプト>
			Vue.component('ブログ投稿', {
				プロパティ: ['post'],
				テンプレート: `
					<div class="ブログ投稿">
						<h3>{{ 投稿.タイトル }}</h3>
						<div v-html="投稿コンテンツ"></div>
					</div>
				`
			})

			新しいVue({
				el: '#app',
				データ: {
					投稿:
						{ id: 1、タイトル: 'Vue との旅'、コンテンツ: '私の旅...' }、
						{ id: 2、タイトル: 'Vue でブログを書く'、コンテンツ: '私のブログ...' }、
						{ id: 3、title: 「Vue が楽しい理由」、content: 「Vue はとても楽しい...」 }
					]
				}
			});
  </スクリプト>
 </本文>
</html>

v-bind:post="post" によってバインドされた投稿はオブジェクトであるため、多くのプロパティを介してデータを渡す手間が省けることに注意してください。

4 サブコンポーネントイベントのリッスン

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<div :style="{fontSize: postFontSize + 'em'}">
				<blog-post v-for="投稿内の投稿" 
					v-bind:key="post.id" 
					v-bind:post="投稿"
					v-on:enlarge-text="postFontSize += 0.1" />
			</div>			
		</div>
  <スクリプト>
			Vue.component('ブログ投稿', {
				プロパティ: ['post'],
				テンプレート: `
					<div class="ブログ投稿">
						<h3>{{ 投稿.タイトル }}</h3>
						<button v-on:click="$emit('enlarge-text')">テキストを拡大する</button>
						<div v-html="投稿コンテンツ"></div>
					</div>
				`
			})

			新しいVue({
				el: '#app',
				データ: {
					投稿フォントサイズ: 1,
					投稿:
						{ id: 1、タイトル: 'Vue との旅'、コンテンツ: '私の旅...' }、
						{ id: 2、タイトル: 'Vue でブログを書く'、コンテンツ: '私のブログ...' }、
						{ id: 3、title: 「Vue が楽しい理由」、content: 「Vue はとても楽しい...」 }
					]
				}
			});
  </スクリプト>
 </本文>
</html>

子コンポーネントは、 $emitメソッドを使用してイベント名を渡すことでイベントをトリガーします。親コンポーネントはこのイベントを受信できます。

イベントを使用して値をスローすることができます。

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<div :style="{fontSize: postFontSize + 'em'}">
				<blog-post v-for="投稿内の投稿" 
					v-bind:key="post.id" 
					v-bind:post="投稿"
					v-on:enlarge-text="postFontSize += $event" />
			</div>			
		</div>
  <スクリプト>
			Vue.component('ブログ投稿', {
				プロパティ: ['post'],
				テンプレート: `
					<div class="ブログ投稿">
						<h3>{{ 投稿.タイトル }}</h3>
						<button v-on:click="$emit('enlarge-text', 0.2)">フォントを拡大する</button>
						<div v-html="投稿コンテンツ"></div>
					</div>
				`
			})

			新しいVue({
				el: '#app',
				データ: {
					投稿フォントサイズ: 1,
					投稿:
						{ id: 1、タイトル: 'Vue との旅'、コンテンツ: '私の旅...' }、
						{ id: 2、タイトル: 'Vue でブログを書く'、コンテンツ: '私のブログ...' }、
						{ id: 3、title: 「Vue が楽しい理由」、content: 「Vue はとても楽しい...」 }
					]
				}
			});
  </スクリプト>
 </本文>
</html>

親コンポーネントでは、$event を通じてスローされた値にアクセスできます。
コンポーネントで v-model を使用できます。

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<!-- <input v-model="searchText"> -->
			<input v-bind:value="searchText" v-on:input="searchText = $event.target.value">
			<p>{{ 検索テキスト }}</p>
		</div>
  <スクリプト>
			新しいVue({
				el: '#app',
				データ: {
					検索テキスト: ''
				}
			});
  </スクリプト>
 </本文>
</html>
<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8">  
  <スタイル>
   
  </スタイル>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
 </head>
 <本文>
		<div id="アプリ">
			<カスタム入力 v-model="検索テキスト"></カスタム入力>
			<custom-input v-bind:value="searchText" v-on:input="searchText = $event"></custom-input>
			<p>{{ 検索テキスト }}</p>
		</div>
  <スクリプト>
			Vue.component('カスタム入力', {
				プロパティ: ['値'],
				テンプレート: `<input v-bind:value="value" v-on:input="$emit('input', $event.target.value)" >`
			})

			新しいVue({
				el: '#app',
				データ: {
					検索テキスト: ''
				}
			});
  </スクリプト>
 </本文>
</html>

最後に、DOM テンプレートを解析する際の注意事項です。

以上がVueコンポーネントの基礎知識のまとめの詳しい内容です。Vueコンポーネントについてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • VUEの基本を理解するのに役立つ記事
  • VUE ユニアプリコア知識の簡単な紹介
  • Vueを使い始める際に習得する必要がある知識について簡単に説明します
  • Vueコンポーネント入門知識の包括的なレビュー
  • Vueの基礎知識はご存知ですか?

<<:  ZFS とは何か? ZFS を使用する理由とその機能

>>:  Linux インストール MySQL チュートリアル (バイナリ配布)

推薦する

XHTML ブロックレベルタグの概要

* 住所 - 住所* blockquote - ブロック引用* center - 中央揃えブロック*...

インストールされていないバージョンの MySQL を使用する手順とパスワードを忘れた場合の解決策

最初のステップは、圧縮されたパッケージを対応するディスクに解凍することです。 2 番目の手順は、cm...

CSS スティッキーフッタークラシックレイアウトの実装

スティッキーフッターレイアウトとは何ですか?一般的な Web ページのレイアウトは、通常、ヘッダー部...

nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

0x00 はじめにWordPress は、世界で最も人気のある CMS システムです。PHP と M...

マウスを動かしたときに画像のズーム効果とゆっくりとした遷移​​効果を実現するCSSのサンプルコード

transform:scale()比例したズームインまたはズームアウトを実現できます。 transi...

MySQL 5.7.20 共通ダウンロード、インストール、設定方法と簡単な操作スキル(解凍版無料インストール)

早朝に MySQL 5.7.19 のインストールを終えたばかりですが、午前中に MySQL が最新バ...

モバイル開発チュートリアル: ピクセル表示の問題の概要

序文モバイル端末の開発の過程で、モバイル端末のディスプレイはデスクトップ端末のディスプレイとは一般的...

Linux を使用して時間指定ファイルが占有するディスク容量を計算する方法

スケジュールされたタスク エディターを開きます。Cent は、デフォルトで vim を使用して直接開...

HTMLページ間でパラメータを渡すフロントエンド方式の詳細な説明

プロジェクトでよくある状況として、案件リストなどのリストが存在することがあります。リスト内の項目をク...

Vue マルチ選択リスト コンポーネントの詳細な説明

マルチ選択は、すべてのオプションを一覧表示し、ユーザーが Ctrl/Shift キーを使用して複数選...

VMware は Centos7 システムの PXE+kickstart 無人インストールの詳細なプロセスを実装します

目次PXEはサーバーの無人バッチ展開を実装します1. PXEの概要1.1 PXEとは何か1.2 キッ...

MySQLバッチは特定のフィールドのスペースを削除します

Mysql で特定のフィールドからスペースを一括削除する方法はありますか?文字列の前後のスペースだけ...

Nginx のパラメータをオンにして Web パフォーマンスを 3 倍向上させる方法

1. 遭遇したいくつかの問題2008 年にパフォーマンス テストを行っていたとき、パフォーマンス テ...

nginx+uwsgi で Django プロジェクトを開始するための詳細な手順

Django で Web プロジェクトを開発する場合、開発およびテストのプロセスでは Django ...