場合によっては、ユーザーがボタンをクリックして同様のフォームを追加し、クリックごとに 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については、データ型と操作テーブルを知る必要があります
前回の記事では、Windows でタイムアウトを試してみました。この記事では、Linux で試してみ...
Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...
序文最近、フロントエンドの知識をまとめており、いくつかのインタビューにも参加しました。インタビュー中...
必要なファイルをインストールする Yum インストール openssl-* -yデータベースインデッ...
テーブル構造とそのデータをコピーする次のステートメントは、データを新しいテーブルにコピーします。注:...
ここでは主に、WeChat アプレットでラッキーホイール ゲームを開発する方法を紹介します。主に J...
イメージは、GitHub と同様に Docker パブリック リポジトリに直接簡単にプッシュできます...
ステートメント 1: <link rel="shortcut icon" ...
目次序文以前のバージョンイテレータパターンイテレータファクトリ関数イテレータプロトコル最後に序文多く...
データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。参照整合性:参照整合性...
CentOS 7.3のインストール手順を図解しました。具体的な内容は次のとおりです。この記事では、v...
Hexo は Windows 10 でカスタムドメイン名を GitHub にバインドしますまずドメイ...
MySQL で、id、a、b の 3 つのフィールドを持つ新しいテーブルを作成します。次のように、同...
1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...
目次1. これは2. この点を修正する1. call() メソッド2. apply() メソッド要約...