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 仮想ホストの詳細な分析

推薦する

Linux でタイムアウト付きの接続関数を試す

前回の記事では、Windows でタイムアウトを試してみました。この記事では、Linux で試してみ...

Linux で NFS ファイル共有サーバーを構築するための詳細な手順

Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...

CSS レイアウト チュートリアル: 垂直方向の中央揃えを実現する方法

序文最近、フロントエンドの知識をまとめており、いくつかのインタビューにも参加しました。インタビュー中...

Linux Centos8 CA証明書作成チュートリアル

必要なファイルをインストールする Yum インストール openssl-* -yデータベースインデッ...

MySQL テーブルをコピーする 3 つの方法 (要約)

テーブル構造とそのデータをコピーする次のステートメントは、データを新しいテーブルにコピーします。注:...

WeChatアプレットでラッキーホイールゲームを実装する方法

ここでは主に、WeChat アプレットでラッキーホイール ゲームを開発する方法を紹介します。主に J...

Dockerイメージをプライベートリポジトリにアップロードする方法の例

イメージは、GitHub と同様に Docker パブリック リポジトリに直接簡単にプッシュできます...

ショートカットアイコンとアイコンコードの違いの紹介

ステートメント 1: <link rel="shortcut icon" ...

ECMAScript のイテレータの詳細な説明

目次序文以前のバージョンイテレータパターンイテレータファクトリ関数イテレータプロトコル最後に序文多く...

MySQL: データの整合性

データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。参照整合性:参照整合性...

VMWare に CentOS 7.3 をインストールするグラフィカル チュートリアル

CentOS 7.3のインストール手順を図解しました。具体的な内容は次のとおりです。この記事では、v...

Windows 10 でカスタムドメイン名をバインドするように Hexo と GitHub を構成する方法

Hexo は Windows 10 でカスタムドメイン名を GitHub にバインドしますまずドメイ...

MySQLのGROUP BYステートメントを最適化する方法

MySQL で、id、a、b の 3 つのフィールドを持つ新しいテーブルを作成します。次のように、同...

CSS3 フィルター属性の使い方の紹介

1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...

JavaScript プロトタイプオブジェクトの this ポイント問題の詳細な説明

目次1. これは2. この点を修正する1. call() メソッド2. apply() メソッド要約...