Vue のループフォーム項目例の詳細な説明

Vue のループフォーム項目例の詳細な説明

場合によっては、ユーザーがボタンをクリックして同様のフォームを追加し、クリックごとに 1 回追加できるという要件に遭遇することがあります。次に、ディープコピー、Vue.js + ElementUI などを使用する必要があります。効果はおおよそ次のようになります。フォームにはドロップダウン ボックスと 2 つの入力ボックスがあります。ここで [フォームの追加] ボタンをクリックすると、別のフォームが表示されます。[フォームの送信] をクリックすると、2 つのフォームの値を同時に送信できます。

ここに画像の説明を挿入

コードは次のとおりです。

<テンプレート>
  <div>
    <div スタイル="margin: 10px 0">
      <el-button type="primary" @click="addForm">フォームを追加</el-button>
      <el-button type="primary" @click="submit">フォームを送信</el-button>
    </div>
    <div v-for="(item, index) in リスト" :key="index">
      <el-form ref="フォーム" label-width="80px">
        <el-form-item label="ライブ放送プラットフォーム">
          <el-選択
            v-model="item.platform"
            :key="インデックス"
            placeholder="ライブストリーミングプラットフォームを選択してください"
          >
            <el-オプション
              :label="item2.プラットフォーム名"
              v-for="(item2, index2) in platformNameList"
              :key="インデックス2"
              :value="item2.プラットフォーム値"
            >
            </el-option>
          </el-select>
        </el-form-item>

        <el-form-item label="ファンの数">
          <el-input v-model="item.fanMount" :key="index"></el-input>
        </el-form-item>

        <el-form-item label="プラットフォームID">
          <el-input v-model="item.platformId" :key="index"></el-input>
        </el-form-item>
      </el-form>
    </div>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      タイトル:「検査コンテンツページ」、
      人オブジェクト: {
        プラットフォーム: "",
        ファンマウント: "",
        プラットフォーム ID: "",
      },
      プラットフォーム名リスト: [
        {
          プラットフォーム名: "Kuaishou",
          プラットフォーム値: "1",
        },
        {
          プラットフォーム名: "TikTok",
          プラットフォーム値: "2",
        },
        {
          プラットフォーム名: "Taobao",
          プラットフォーム値: "3",
        },
      ]、
      リスト: [
        {
          プラットフォーム: "",
          ファンマウント: "",
          プラットフォーム ID: "",
        },
      ]、
    };
  },

  メソッド: {
  //ディープコピー cloneObj(obj) {
      レットする;
      Array.isArray(obj) の場合 {
        //空の配列を作成します。ret = [];
        (i = 0 とします; i < obj.length; i++) {
          ret[i] = this.cloneObj(obj[i]);
        }
        ret を返します。
      } そうでない場合 (Object.prototype.toString.call(obj) === "[object Object]") {
        戻り値:
        for (let i in obj) {
          ret[i] = this.cloneObj(obj[i]);
        }
        ret を返します。
      } それ以外 {
        obj を返します。
      }
    },
    //フォームを追加する addForm() {
      arr = this.cloneObj(this.personObj) とします。
      console.log("arr", arr);
      this.List.push(arr);
    },
    //フォームを送信するsubmit() {
      console.log("this.List", this.List);
    },
  },
};
</スクリプト>

コード分​​析:
ここではディープ コピー関数がカプセル化されています。フォームの追加をクリックするたびに、定義したオブジェクトのコピーがコピーされます。このオブジェクトは、最初のフォームの値で構成されていることに注意してください。v-for を使用して、最外層の配列リストをトラバースし、「フォームの追加」をクリックするたびにオブジェクトを配列にプッシュします。最後に、「フォームの送信」ボタンをクリックして this.List を印刷し、配列オブジェクト全体を確認します。試して、次の値を入力するように選択してみましょう。

ここに画像の説明を挿入

コンソールには次の結果が出力されます。

ここに画像の説明を挿入

ここで、フォームを 1 つずつ追加するのではなく、追加するフォームを複数指定する必要があるとします。その効果は次のようになります。ボタンは 3 つあり、最初に 1 つのフォームが表示されます。

ここに画像の説明を挿入

「3」ボタンをクリックすると、以下に示すように、インターフェイス上に合計 3 つのフォームが表示されます。

ここに画像の説明を挿入

コードは次のとおりです。

<テンプレート>
  <div>
    <div スタイル="margin: 10px 0">
      <el-button type="primary" @click="add(3)">3</el-button>
      <el-button type="primary" @click="addForm">フォームを追加</el-button>
      <el-button type="primary" @click="submit">フォームを送信</el-button>
    </div>
    <div v-for="(item, index) in リスト" :key="index">
      <el-form ref="フォーム" label-width="80px">
        <el-form-item label="ライブ放送プラットフォーム">
          <el-選択
            v-model="item.platform"
            :key="インデックス"
            placeholder="ライブストリーミングプラットフォームを選択してください"
          >
            <el-オプション
              :label="item2.プラットフォーム名"
              v-for="(item2, index2) in platformNameList"
              :key="インデックス2"
              :value="item2.プラットフォーム値"
            >
            </el-option>
          </el-select>
        </el-form-item>

        <el-form-item label="ファンの数">
          <el-input v-model="item.fanMount" :key="index"></el-input>
        </el-form-item>

        <el-form-item label="プラットフォームID">
          <el-input v-model="item.platformId" :key="index"></el-input>
        </el-form-item>
      </el-form>
    </div>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      タイトル:「検査コンテンツページ」、
      人オブジェクト: {
        プラットフォーム: "",
        ファンマウント: "",
        プラットフォームID: "",
      },
      プラットフォーム名リスト: [
        {
          プラットフォーム名: "Kuaishou",
          プラットフォーム値: "1",
        },
        {
          プラットフォーム名: "TikTok",
          プラットフォーム値: "2",
        },
        {
          プラットフォーム名: "Taobao",
          プラットフォーム値: "3",
        },
      ]、
      リスト: [
        {
          プラットフォーム: "",

          ファンマウント: "",
          プラットフォーム ID: "",
        },
      ]、
    };
  },

  メソッド: {
    クローンオブジェクト(obj) {
      レットする;
      Array.isArray(obj) の場合 {
        //空の配列を作成します。ret = [];
        (i = 0 とします; i < obj.length; i++) {
          ret[i] = this.cloneObj(obj[i]);
        }
        ret を返します。
      } そうでない場合 (Object.prototype.toString.call(obj) === "[object Object]") {
        戻り値:
        for (let i in obj) {
          ret[i] = this.cloneObj(obj[i]);
        }
        ret を返します。
      } それ以外 {
        obj を返します。
      }
    },
    追加(a) {
      this.addForm(a);
    },
    フォームを追加します(a) {
      arr = this.cloneObj(this.personObj) とします。
      console.log("arr", arr);
      this.List.push(arr);
      a--;
      もし(a>0){
        this.addForm(a - 1);
      }
    },
    提出する() {
      console.log("this.list", this.List);
    },
  },
};
</スクリプト>

<スタイル>
</スタイル>

コード分​​析は次のとおりです。

ボタンのaddメソッドをクリックした際にフォームの総数が渡され、その後フォームを追加するaddFormメソッドで自己減分、判定、再帰を利用して連続クリック時のコピーを実装します。次に効果を試します

ここに画像の説明を挿入

コンソールを印刷する

ここに画像の説明を挿入

これで、Vue でのフォーム項目のループの例に関するこの記事は終了です。Vue のループ フォーム項目に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue.js で v-for ループを使用して動的タグを生成する方法
  • Vue v-for ループを書く 7 つの方法
  • vue v-for ループ オブジェクトの属性
  • Vue ベースの円形スクロールリスト機能を実装する
  • Vue でシンプルな無限ループスクロールアニメーションを実装する例
  • この記事では、vue.jsのイベントループの仕組みを紹介します。

<<:  MYSQLについては、データ型と操作テーブルを知る必要があります

>>:  Nginx 仮想ホストの詳細な分析

推薦する

Docker のコンテナ データ ボリュームの概要

目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...

Ubuntu 18仮想マシンのクローン作成後に同じIPアドレスになる問題の解決方法

序文最近、仮想マシンを使用して Ubuntu 18.04 をインストールしました。クローン作成後、I...

MySQL マスタースレーブレプリケーション 読み書き分離の設定方法の詳細説明

1. 説明前回は、MySQL のインストールと構成、MySQL ステートメントの使用、MySQL デ...

Webフロントエンドベクターアイコンの使い方

序文フロントエンドページを書くとき、小さなアイコンなどの画像を使うことが多いです。画像を使うとコード...

Nginx の場所に関する一般的なルールの優先順位の問題

目次1. 場所/マッチング2. 場所 = / 一致Locaitonには、完全一致(=)、プレフィック...

Kali Linux システムのバージョンを確認する方法

1. Kali Linuxシステムのバージョンを確認するコマンド: cat /etc/issue 2...

Vue3 Vue イベント処理ガイド

目次1. 基本的なイベント処理2. 親コンポーネントにカスタムイベントを送信するマウス修飾子4. キ...

SQL 文で OR と AND を混在させる場合のヒント

現在、このような要件があります。ログインした人がカスタマー サービス担当者である場合、注文は「このカ...

HTML テーブル マークアップ チュートリアル (1): テーブルの作成

<br />これは 123WORDPRESS.COM が提供する一連のチュートリアルです...

IDEA で Docker を WSL2 にデプロイする詳細なプロセス

ローカル環境はWindows10+WSL2(Ubuntu)です。サーバーにDockerをインストール...

MySQL の自動増分 ID に関するいくつかの小さな問題の要約

以下の質問はすべて InnoDB ストレージ エンジンに基づいています。 1. 最も大きな ID を...

上下に空白行があるフォームを挿入する解決策

ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...

auto.jsを使用して毎日の自動チェックイン機能を実現する

auto.js を使用して毎日のチェックインを自動化する感染症のせいで、毎日時間通りに家に帰らなけれ...

MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?

私は最近新しい会社に入社したのですが、データベース設計にいくつか小さな問題があることに気付きました。...