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 万件のレコードをすばやくクエリする方法

推薦する

反応ループデータの実装(リスト)

まず、バックグラウンドから来るデータをシミュレートしてみましょう。ここでは、コードをわかりやすくする...

MySQL における or、in、union、インデックス最適化の詳細な分析

この記事は、「1 分でインデックス作成スキルを学ぶ」という宿題から生まれました。注文ビジネス テーブ...

CSS を使用して ul と li の水平配置を実現する 2 つの方法

li はブロックレベル要素であり、デフォルトで 1 行を占めるため、水平方向の配置を実現する場合は、...

Linux仮想メモリについての簡単な説明

目次起源仮想メモリページングとページテーブルメモリのアドレス指定と割り当て関数プロセスメモリ管理デー...

Docker で PostgreSQL を実行し、いくつかの接続ツールを推奨する

1 はじめに PostgreSQL は、非常に充実した機能を備えたフリーソフトウェアのオブジェクトリ...

Navicat for MySQL 15 登録とアクティベーションの詳細なチュートリアル

1. Navicat for MySQL 15をダウンロードするhttps://www.navica...

Dockerデータ管理とネットワーク通信の使用

Docker をインストールし、Docker コアとインストールを通じて簡単な操作を実行できます。 ...

jsネイティブカルーセルプラグインの制作

この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...

MySQL 外部キー (FOREIGN KEY) の使用例の詳細な説明

はじめに: すべてのデータを 1 つのテーブルに保存することのデメリット表の構成構造は複雑で不明瞭で...

Docker初心者が初めてよく使うコマンドを試してみる練習記録

Docker を正式に使用する前に、まず Docker でよく使用されるコマンドに慣れておきましょう...

DockerにRedisをインストールし、設定ファイルとして起動する詳細な説明

更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.14のインストールと設定のプロセスを記録しています。具体的な内容は...

バインドを使用してDNSサーバーを設定する方法

DNS(ドメインネームサーバー)は、ドメイン名とそれに対応する IP アドレスを変換するサーバーです...

知っておくべき 18 の Web ユーザビリティの原則

世界最高のビジュアル デザイン スキルを持っていたとしても、訪問者がページ間やアイテム間を快適に移...

TypeScript での関数オーバーロード

目次1. 関数シグネチャ2. 関数のオーバーロード2.1 オーバーロードされたシグネチャは呼び出し可...