Vue が値を返してフォームを動的に生成し、データを送信する仕組みの詳細な説明

Vue が値を返してフォームを動的に生成し、データを送信する仕組みの詳細な説明

解決された主な問題

1. Vue はループ時に異なる v-model を動的にバインドする必要があります。Vue の動的フォームにデータをバインドするにはどうすればよいでしょうか?

2. 動的フォームの名前属性に対応するすべてのキーと値のペアがバックエンドに送信されます。

1. バックエンドから返され、バックエンドに送信されるデータは、次の形式になります。

// バックエンドから返されたデータは、戻り値の型に応じて対応するコンポーネントで使用されます [
	{
	    "コンポーネントタイプ": "入力",
	    "コンポーネント名": "ユーザー名",
	    "required": "1", // 送信時に入力が必須かどうか "name": "名前",
	},
	{
        "コンポーネントタイプ": "ラジオ",
        "コンポーネント名": "性別",
        "必須": "1",
        "名前": "性別",
        「オプション」: [
            {
                "名前": "男性",
                "値": "0000"
            },
            {
                "名前": "女性",
                "値": "1111"
            }
        ]
   }
]
// サーバーに送信されるデータ形式 {
	ユーザー名: '私の名前',
	sex: '0000' // 「男性」に相当
}

2. Vue フロントエンド コードは次のとおりです。

<テンプレート>
  <div class="ページコンテナ">
      <div class="dynamic-content">
        <div v-for="(item,idx) in infoList" :key="idx​​">
          <input class="common-input" v-model="modelItems[idx]" v-if="item.componentType=='input'">
          <van-radio-group v-model="modelItems[idx]" direction="horizo​​ntal" v-if="item.componentType=='radio'">
            <van-radio :name="itemRadio.value" v-for="item.options 内のitemRadio" :key="itemRadio.value">
              {{itemRadio.name}}
            </バンラジオ>
          </バンラジオグループ>
        </div>
        <div class="common-btn" @click="clickSubmit">データを送信</div>
      </div>
  </div>
</テンプレート>
<スクリプト>
'vue' から Vue をインポートします
'@/api/home' から { getListData } をインポートします。
'vant' から { RadioGroup, Radio } をインポートします。
Vue.use(ラジオ).use(ラジオグループ)
エクスポートデフォルト{
  データ() {
    戻る {
      modelItems: {}, // Vue はループ時に異なる v-model を動的にバインドする必要があります
      情報リスト: []
    }
  },
  マウント() {
    this.formKeyArr = []
    このリストを取得する()
  },
  メソッド: {
    getList() {
      リストデータを取得する()
        .then((res) => {
          定数 infoListData = res.infoList
          this.infoList = 情報リストデータ
          infoListData.forEach((アイテム、インデックス) => {
          	// 属性名とそれが必須かどうかを保存します。これは、後続のデータ送信に使用されます // { name: 'username', type: 1 }, { name: 'sex', type: 1}
            this.formKeyArr.push({ 名前: item.componentName、 タイプ: item.required })
          })
        })
        .catch(() => {
        })
    },
    クリック送信() {
      const postParams = {} // 送信されたデータ let isCanSubmit = true
      this.formKeyArr.forEach((item, index) => {
        console.log('item=', アイテム)
        if (item.type === '1' && !this.modelItems[index]) { // すべて必須タグ // 最初にフォームに記入してください。トーストフォームを完全に記入してください isCanSubmit = false
        }
        postParams[item['name']] = this.modelItems[index]
      })
      if (isCanSubmit) {
      	//データを送信できます //送信されたフォームデータを取得できます //{ username: 'my name', sex: '0000' //「男性」に相当 }
      	コンソールログ('postParams=', postParams)
      }
    }
  }
}
</スクリプト>
<スタイル lang="scss">
</スタイル>

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • VueはフォームデータをJSON形式に変換する実装です
  • Vue フォーム データのインタラクティブ送信デモ チュートリアル
  • vueは同じフォームを使用して追加と編集を行い、el-formはフォーム送信後にフォームデータをクリアします。
  • Vueでフォームデータを取得する方法
  • Vueはフォームデータの追加、削除、変更機能を実装します
  • Vue の Element-ui フォームを使用してデータと複数の画像をバックエンドに送信する方法
  • Vueのフォームデータ収集方法の詳細

<<:  HTML_PowerNode Java アカデミーでテーブルを動的に追加する

>>:  MySQL で 1000 万件のレコードをすばやくクエリする方法

推薦する

Flask と Vue のフロントエンドとバックエンドを分離したプロジェクト展開のサンプル コード

以前、プロジェクトを開発しました。バックエンドのインターフェースを書くために Flask フレームワ...

Vue3 の参照と参照の詳細

エディターは、Vue3のデータの関連する問題も共有します。次のような例を見てみましょう。 Vue.c...

Nginx 構成 SSL および WSS 手順の紹介

目次序文1. Nginxのインストール1. Nginxをダウンロードする2. 依存関係をインストール...

Linux でプロセスを隠す方法と、遭遇する落とし穴

序文1. この記事で使用したツールは、https://github.com/gianlucabore...

Nginx の高同時実行最適化の実践

1. チューニングの必要性​ 私は、どのように書けばいいのか本当に分からないので、共有するために最適...

MySQL 5.7.20 の解凍バージョンをインストールするための詳細な手順 (2 つの方法)

Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...

HTMLのリストタグを数える

1. <dl>はリストを定義し、<dt>はリスト内の項目を定義し、<d...

画像内のrarファイルを隠す方法

このロゴを .rar ファイルとしてローカルに保存し、解凍して効果を確認することができます。よりシン...

Linux SecureCRT の文字化けの解決方法

SecureCRT が文字化けした文字を表示する状況を見てみましょう。例えば: ではリセットしてみま...

Ubuntu 18.04 に phpMyAdmin をインストールするための詳細なチュートリアル

Ubuntu 18.04 上の Apache で動作するように phpMyAdmin をインストール...

ページデザインにおけるテーブルとdivの適切な適用についての簡単な説明

この記事の冒頭で、以前書いた入門記事の間違いを訂正したいと思います。初心者を再び誤解させないように、...

テキストスクロール後の自動停止効果の例

効果は非常にシンプルで、次のコードを自分のページにコピーして実行するだけです。コードをコピーコードは...

Vue コード強調プラグインの総合的な比較と評価

目次総合的な比較アクティブの観点から機能的な観点から詳細な比較1. エース2. コードミラー3. モ...

CSS 境界線の長さ制御機能の実装

以前は、境界線の長さをコンテナーよりも小さくする必要があったときに、div ネストを使用していました...