場合によっては、ユーザーがボタンをクリックして同様のフォームを追加し、クリックごとに 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); }, }, }; </スクリプト> コード分析: コンソールには次の結果が出力されます。 ここで、フォームを 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MYSQLについては、データ型と操作テーブルを知る必要があります
目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...
序文最近、仮想マシンを使用して Ubuntu 18.04 をインストールしました。クローン作成後、I...
カスタムパラメータを渡すだけhtml <div id="アプリ"> ...
1. 説明前回は、MySQL のインストールと構成、MySQL ステートメントの使用、MySQL デ...
序文フロントエンドページを書くとき、小さなアイコンなどの画像を使うことが多いです。画像を使うとコード...
目次1. 場所/マッチング2. 場所 = / 一致Locaitonには、完全一致(=)、プレフィック...
1. Kali Linuxシステムのバージョンを確認するコマンド: cat /etc/issue 2...
目次1. 基本的なイベント処理2. 親コンポーネントにカスタムイベントを送信するマウス修飾子4. キ...
現在、このような要件があります。ログインした人がカスタマー サービス担当者である場合、注文は「このカ...
<br />これは 123WORDPRESS.COM が提供する一連のチュートリアルです...
ローカル環境はWindows10+WSL2(Ubuntu)です。サーバーにDockerをインストール...
以下の質問はすべて InnoDB ストレージ エンジンに基づいています。 1. 最も大きな ID を...
ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...
auto.js を使用して毎日のチェックインを自動化する感染症のせいで、毎日時間通りに家に帰らなけれ...
私は最近新しい会社に入社したのですが、データベース設計にいくつか小さな問題があることに気付きました。...