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

推薦する

MySQL ステートメントを使用した簡単な追加、削除、変更、クエリ操作の例

この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...

CSS3 で半透明の背景画像と不透明なコンテンツを実現する方法の例

以前のブログのログインページを作成していたときに、この問題に遭遇しました。突然、透明な背景画像と不透...

JavaScript 文字列操作の 4 つの実用的なヒント

目次序文1. 文字列を分割する2. JSONのフォーマットと解析3. 複数行の文字列と埋め込み式4....

Vueはタブルーティング切り替えコンポーネントのメソッド例を実装します

序文この記事では、vue に付属している vue-router.js ルーティングを使用してページン...

Ubuntu 18.04 で MySQL のインストール時にパスワードが要求されない場合の解決方法

Ubuntu 1804 への MySQL 5.7 のインストールについて詳しく紹介します。 MySQ...

一定時間後にNavicatがデータベースから自動的に切断される問題の解決方法

これは、データベース サーバーが、接続が多すぎるのを避けるために、一定時間非アクティブな状態が続くと...

nginx で Vue プロジェクトをデプロイする方法

今日は nginx サーバーを使用するのですが、vue プロジェクトをサーバーにデプロイする必要もあ...

DELL R730 サーバーの構成 RAID とインストール サーバー システムとドメイン制御の詳細なグラフィック チュートリアル

最近、会社で DELL R730 サーバーを購入したのですが、偶然次のチュートリアルを見つけたので、...

シェルスクリプトを使用したMySQLデータベースの自動バックアップ

シェルスクリプトを使用したMySQLデータベースの自動バックアップデータベースを頻繁にバックアップす...

Vue2.0/3.0双方向データバインディングの実装原理の詳細説明

Vue2.0/3.0双方向データバインディングの実装原理双方向データバインディングとは、データの変更...

Vue は QR コード スキャン機能を実装します (スタイル付き)

必要: vue を使用して QR コードのスキャンを実現します。プラグイン: QRコードリーダー;プ...

vue-element-admin プロジェクトのインポートとエクスポートの実装

vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...

Docker mongoDB 4.2.1 をインストールし、Springboot ログを収集する詳細な手順

1: dockerにmongodbをインストールするステップ1: dockerにmongodbをイン...

Vueエンジニアがカプセル化しなければならない埋め込み命令の知識のまとめ

目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...

MySQLオンラインDDL gh-ostの使用の概要

背景: DBA として、大規模なテーブルの DDL 変更のほとんどは、Percona の pt-on...