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 チュートリアル (バイナリ配布)

推薦する

MySQL の concat 関数についての簡単な説明。MySQL でフィールドの前または後に文字列を追加する方法

MySQL で concat 関数を使用する方法: CONCAT(文字列1、文字列2、…)戻り値は、...

VMware マルチノード環境を構成する方法

このチュートリアルでは CentOS 7 64 ビットを使用します。各仮想マシンに 2GB のメモリ...

MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。

目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...

スタイリッシュなウェブページデザインを作成する方法(グラフィックチュートリアル)

「壮大」という言葉は、おそらく現代のデザイナーが最も聞きたくない言葉でしょう。デザイナー:「デザイン...

MySQL のインデックス有効条件とインデックス無効条件の結合

目次1. ジョイントインデックスの故障の条件2. インデックス失敗の条件1. ジョイントインデックス...

Vueのリストレンダリングの詳細な説明

目次1. v-for: 配列の内容を走査する(よく使われる) 2. v-for: オブジェクトのプロ...

WeChatアプレットの下部にあるタブバーがコンテンツをブロックする問題に対処する簡単な方法

WeChatアプレットでタブバーを設定すると、重要なコンテンツがブロックされ、iPhoneXなどの異...

mybatis-plusページングパラメータが渡された後、SQLのwhere条件にはページング情報操作の制限がありません

2時間近くかけて、さまざまな方法を試しました。後で、whereでフィルタリングした後のデータ量が1ペ...

CentOS7.x のアンインストールとインストール MySQL5.7 の操作手順とエンコード形式の変更方法

1. MySQL 5.7 のアンインストール1.1查看yum是否安裝過mysql CD yum li...

mysqlは複数の主キーを設定する操作を実装します

ユーザーテーブル、ID番号は一意である必要があります、携帯電話番号、電子メールアドレスは一意である必...

3つのDocker Nginxログの処理の詳細な説明

社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...

一般的な Dockerfile コマンドの使用方法の紹介

目次01 CM 02 エントリーポイント03 ワークディレクトリ04 環境05 ユーザー06巻07 ...

Mysql は非集計列を選択できません

1. はじめに最近ブログをアップグレードし、記事ページの下部に前の記事と次の記事に直接ジャンプできる...

HTMLエンコードによる文字化け問題について

今日、3年生から質問がありました。彼が書いた HTML コードを開くと、文字化けした文字が表示されま...

Mysql クエリの結果セットを JSON データに変換するサンプル コード

Mysql はクエリ結果セットを JSON データに変換します 序文 学生テーブル 学生スコアテーブ...