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最適化に役立ちます

推薦する

HTML ウェブページ作成のための 8 つの強力なテクニック

<br />作業を簡単に完了できる Web ページ作成ツールは数多くありますが、HTML...

Vueの最初のプログラムを書くための勉強ノート

目次1. HTMLを書く、最初のVueプログラムビューテンプレートとデータに注意してください決定ルー...

時間のかかるMySQLレコードのSQL例の詳細な説明

mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...

MySQL関数の簡単な紹介

目次1. 数学関数2. 文字列関数3. 日付関数4. 暗号化機能主な MySQL 関数は次のように紹...

HTML で相対パスを使用してディレクトリのすべてのレベルのファイルを取得する方法の詳細な説明

相対パスの概念現在のファイルの場所を参照ポイントとして使用して、ターゲット ファイルへのパスを確立し...

MySQLデータのエクスポートとインポートに関する知識ポイントの簡単な分析

多くの場合、ローカル データベースのデータをエクスポートしたり、他のデータベースからデータをインポー...

ftp は SSH 経由で Linux にリモート接続します

まず Linux に ssh をインストールします。例として Centos を使用します。ポータル:...

vue3.0+echarts は 3 次元の縦棒グラフを実現します

序文: Vue3.0はechartsの3次元縦棒グラフを実装します結果: 実装手順: 1. echa...

nginx での書き換えジャンプの実装

1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...

Linux7 ベースの Hadoop のインストールと構成の詳細なグラフィック説明

上記のように材料を準備します(ps: hadoop-3.1.2-srcはhadoop-3.1.2に変...

ウェブサイトのビジュアルデザイン(画像とテキスト)における情報伝達の役割と方法

現代の Web ビジュアル デザインは、初期の情報の積み重ねから、その後のグラフィックスと抽象化、そ...

JavaScript はチェックボックスの選択機能を実装します

この記事の例では、すべてのチェックボックスの選択を実現するためのJavaScriptの具体的なコード...

優れたユーザー エクスペリエンス デザイナーが行うべき 5 つのこと (画像とテキスト)

この記事は、@C7210 によって翻訳されたブログ「Usability Counts」からの翻訳です...

データベース復旧エラーの原因となる MySQL 文字セットの簡単な分析

MySQL の文字セットエンコーディングが正しくないデータをインポートすると、エラーが表示されます。...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...