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

推薦する

Ubuntuにmysql5.7.10を手動でインストールする

このチュートリアルでは、UbuntuにMySQL 5.7.10を手動でインストールする手順を参考まで...

Vue のライフサイクルとフック関数

目次1.ライフサイクルとは何か2. Vueのライフサイクル3. ライフサイクルフック関数1.ライフサ...

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

Mysql 5.7.19 無料インストール版 (64 ビット) の設定方法に関する詳細なチュートリアル

公式サイトから mysql-5.7.19-winx64 をダウンロードします。これはシステムの 64...

クリックナンバーゲームを実装するネイティブJS

参考までに、クリックナンバーゲームをネイティブJSで実装しました。具体的な内容は以下のとおりです。最...

VMware 仮想マシンに Android x86 をインストールする方法

アプリをテストしたいが、それを携帯電話で実行したくない場合があります。この場合、仮想マシンを使用して...

Mysql の使用法の概要

導入EXISTS は、サブクエリが少なくとも 1 行のデータを返すかどうかを確認するために使用されま...

Dockerイメージサイズを最適化する一般的な方法

通常、私たちが構築する Docker イメージはサイズが大きく、多くのディスク領域を占有します。コン...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

2つのシンプルなメニューナビゲーションバーの例

メニューバーの例 1: コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

HTML テーブルタグチュートリアル (11): 水平方向の配置属性 ALIGN

水平方向では、テーブルの配置を左、中央、右に設定できます。基本的な構文<テーブル配置=&quo...

Ace をベースにした Markdown エディターを共有する

エディターは 2 つのカテゴリに分かれていると思います。1 つは、即時レンダリングを実現するために左...

Baidu の https 認証プロンプト「http サイトを 301 から https サイトにリダイレクトしてください」の解決方法の詳細な説明

最近、ウェブサイトを https アクセスに変換したいのですが、すべて完了した後、Baidu Web...

mysqlreplicate を使って MySQL マスタースレーブを素早く構築する方法

導入mysql-utilities ツールセットは、DBA のツールボックスとも言えるさまざまなツー...