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

推薦する

CSSのtranslate(-50%,-50%)は水平および垂直の中央揃え効果を実現します。

translate(-50%,-50%) 属性:中央に配置するには、長さと幅の 50% だけ上と左...

Mac で MySQL バージョン 5.6 のパスワードを設定する方法

MySQLはインストール時に設定できますが、それより低いバージョンは設定できないようで、インストール...

Dockerプライベートウェアハウスの構築とインターフェース管理の詳細な説明

1. レジストリについて公式 Docker ハブは、パブリックイメージを管理するのに適した場所です。...

MySQL 2級コンピュータ試験共通テストポイント 8つのMySQLデータベース設計最適化方法

MySQLデータベース設計の8つの最適化方法の詳細は次のとおりです。 1. 最も適切なフィールド属性...

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

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

Mysql ALTER TABLE はフィールドを追加するときにテーブルをロックしますか?

目次MySQL 5.6以前MySQL 5.6以降要約する知らせMySQL 5.6以前更新手順元のテー...

Linux の EXT シリーズファイルシステムフォーマットの詳細な説明

Linux ファイルシステム一般的なハードディスクは上図のとおりです。各ディスクは複数のトラックに分...

HTML でハイパーリンク タグを使用するチュートリアル

ウェブサイトのさまざまな HTML ドキュメントはハイパーリンクを通じて相互に接続され、一貫性のある...

MYSQL 5.6 スレーブレプリケーションの展開と監視

MYSQL 5.6 スレーブレプリケーションの展開と監視MYSQL 5.6 のインストールと展開 #...

JavaScript マクロタスクとマイクロタスク

マクロタスクとマイクロタスクJavaScript はシングルスレッド言語です (マルチスレッドの場合...

Saltstack に Zabbix サービスをデプロイする方法を説明します

目次SaltstackがZabbixサービスを導入httpd、mysql、phpをインストールするh...

Docker を使用した ELK7.3.0 ログ収集サービスの導入に関するベスト プラクティス

最初に書くこの記事では、ELK 7.3.0 の展開についてのみ説明します。展開環境:システムセントO...

JavaScript Canvas で三目並べゲームを実装

この記事では、JavaScript Canvasで三目並べゲームを実装するための具体的なコードを参考...

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

MySQL 8.0.25解凍版のインストールチュートリアル、参考までに具体的な内容は以下のとおりです...