Vue 条件付きレンダリング v-if と v-show

Vue 条件付きレンダリング v-if と v-show

1. 動詞-if

テンプレートでは、条件に応じてレンダリングできます。条件は、 v-ifv-else-ifv-elseを組み合わせて実装されます。

サンプルコードは次のとおりです。

<div id="アプリ">
    <p v-if="weather == 'sun'">今日は公園に行きましょう! </p>
    <p v-else-if="weather == 'rain'">今日は映画を見に行きましょう! </p>
    <p v-else>今日はどこにも行きません! </p>
</div>
<スクリプト>
    vm = new Vue({
        el: "#app",
        データ: {
            天気: '太陽'
        }
    });
</スクリプト>
 

2. <template> で v-if を使用する

場合によっては、1 つの条件で複数のhtml要素をロードする必要があります。その場合は、 template要素で実行できます。

サンプルコードは次のとおりです。

<div id="アプリ">
    <テンプレート v-if="年齢<18">
        <p>数学は何点ですか? </p>
        <p>英語の点数はいくつですか? </p>
    </テンプレート>
    <テンプレート v-else-if="年齢>=18 && 年齢<25">
        <p>あなたは結婚していますか? </p>
        <p>大学院入試は受けましたか? </p>
    </テンプレート>
    <テンプレート v-else>
        <p>給料は上がりましたか? </p>
        <p>給料はいくらですか? </p>
    </テンプレート>
</div>
<スクリプト>
    vm = new Vue({
        el: "#app",
        データ: {
            年齢: 24
        }
    });
</スクリプト>
 

3. キーを使用して再利用可能な要素を管理する

さらに、テンプレートでは、 Vue再レンダリングするのではなく既存の要素を再利用しようとするため、より効率的になります。

ユーザーがさまざまなログイン方法を切り替えることができるようにする場合:

<div id="アプリ">
  <テンプレート v-if="ログインタイプ === 'ユーザー名'">
    <label for="username">ユーザー名:</label>
    <input type="text" id="ユーザー名" name="ユーザー名" placeholder="ユーザー名">
  </テンプレート>
  <テンプレート v-else>
    <label for="email">メール</label>
    <input type="text" id="email" name="email" placeholder="メールアドレス">
  </テンプレート>
  <div>
    <button @click="changeLoginType">ログインタイプを切り替える</button>
  </div>
</div>
<スクリプト>
  constアプリ = 新しいVue({
    el: "#app",
    データ: {
      ログインタイプ: "ユーザー名"
    },
    メソッド: {
      ログインタイプを変更する(){
        // タイプがユーザー名の場合はメールに切り替え、それ以外の場合は this.loginType = this.loginType==="username"?"email":"username";
      }
    }
  })
</スクリプト>

次に、効果図を見てみましょう。

ここで問題が発生します。 username入力ボックスに情報を入力してメールボックスに切り替えると、以前の情報が保持されます。これは明らかに要件に沿っていません。切り替えるたびにhtml要素を再レンダリングする場合は、再レンダリングする必要がある要素に一意のkey属性を追加できます。 key属性には整数または文字列型を使用することをお勧めします。

サンプルコードは次のとおりです。

<div id="アプリ">
  <テンプレート v-if="ログインタイプ === 'ユーザー名'">
    <label for="username">ユーザー名:</label>
    <input type="text" id="ユーザー名" name="ユーザー名" placeholder="ユーザー名" key="ユーザー名">
  </テンプレート>
  <テンプレート v-else>
    <label for="email">メール</label>
    <input type="text" id="email" name="email" placeholder="Email" key="email">
  </テンプレート>
  <div>
    <button @click="changeLoginType">ログインタイプを切り替える</button>
  </div>
</div>

ユーザー名123メール モードに切り替えると、入力ボックスの123消えることがわかります。

注: <label> 要素にはキー属性が追加されていないため、引き続き効果的に再利用できます。

4. Vショー

条件付きで要素を表示するための別のオプションはv-showディレクティブです。使い方はほぼ同じです:

<h1 v-show="ok">こんにちは!</h1>


違いは、 v-showを持つ要素は常にレンダリングされ、 DOM内に残ることです。 v-show 、要素のCSS property displayを切り替えるだけです。

注意: v-show は <template> 要素をサポートしておらず、v-else もサポートしていません。

4.1 v-if と v-show

v-ifは「true」の条件付きレンダリングであり、条件ブロック内のイベント リスナーと子コンポーネントが切り替え中に適切に破棄され、再構築されることを保証します。

v-ifも遅延です。最初のレンダリングで条件が false の場合、何も行われません。条件ブロックは、条件が初めて true になるまでレンダリングされません。

それに比べて、 v-showはるかに単純です。要素は初期条件に関係なく常にレンダリングされ、 CSSに基づいて単純に切り替えられます。

一般的に、 v-ifは切り替えコストが高く、 v-showは初期レンダリング コストが高くなります。したがって、非常に頻繁に切り替える必要がある場合はv-showを使用する方が適切であり、実行時に条件がほとんど変化しない場合はv-if使用する方が適切です。

これで、vue 条件付きレンダリング v-if と v-show に関するこの記事は終了です。vue 条件付きレンダリングに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue の条件付きレンダリングとリストレンダリングの詳細な理解
  • Vue.js の条件付きレンダリング命令の簡単な分析
  • Vue 基本チュートリアル: 条件付きレンダリングとリストレンダリング
  • Vueのリストレンダリングの詳細な説明
  • vue の v-for ディレクティブはリストのレンダリングを完了します
  • Vue リストのレンダリング、並べ替え、フィルタリングの詳細な説明
  • Vue 条件付きレンダリングとリストレンダリング

<<:  Nginx が Apache より優れている理由

>>:  DIV+CSS命名規則の詳細な説明はSEO最適化に役立ちます

推薦する

Linux lnコマンドの使用

1. コマンドの紹介ln コマンドは、ファイルのリンクを作成するために使用されます。リンクは、ハード...

JavaScript インスタンス オブジェクトでプロトタイプ メソッドをオーバーライドする方法の詳細

目次JavaScriptでは、通常、次のコードのようにクラスを簡単に定義できます。 var サンプル...

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

写真をアップロードして顔を認識する Vue+axios サンプルコード

目次Axios リクエストQs処理データ分析Vantアップロードファイル形式完全なコードこの記事では...

MySQL でのサブクエリの基本的な使用法

目次1. サブクエリの定義2. サブクエリの分類1. スカラーサブクエリ: 2. MySQLサブクエ...

Js でオブジェクトのディープ オブジェクトを安全に取得するメソッドの例

目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...

CentOS プラットフォーム上で LAMP 環境を素早く構築する方法

この記事では、例を使用して、CentOS プラットフォーム上で LAMP 環境を迅速に構築する方法に...

MySQL インフラストラクチャ チュートリアル: クエリ ステートメント実行プロセスの詳細な説明

序文私は以前から、SQL 文がどのように実行され、どのような順序で実行されるのかを知りたいと思ってい...

MySQL 演算子の具体的な使用法 (and、or、in、not)

目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...

Linux Bash スクリプトを使用してユーザーを識別する方法の例

多くの場合、bash スクリプト内またはスクリプト自体内で直接 sudo を使用してコマンドを実行す...

Navicat による MySQL パーティショニングの実践

MySQLのパーティショニングは、非常に大きなテーブルを管理するのに役立ちます。MySQLのパーティ...

HTML+CSS3+JSで実装されたドロップダウンメニュー

成果を達成する html <div class="コンテナ"> &l...

MySQLクエリ構文の概要

序文:この記事では主に、MySQL の where、group by、order by、limit、...

MacでのMySQL初期化パスワード操作

Macでデータベースを操作する際に個人が遭遇するデータベース起動の問題の簡単な記録1. Apple-...

jQueryはクッキーを操作する

コードをコピーコードは次のとおりです。 jQuery.cookie = 関数(名前、値、オプション)...