最近、社内の業務調整により、以前の超長文のロジックが大幅に変更されたため、リファクタリングする予定です(退職したバックエンドスタッフが以前書いたもので、コメントはありません。1つのコンポーネントが4,000行以上あり、本当にやる気がありません)。便宜上、プロジェクトを 14 個のコンポーネントに分割して簡素化しました。 全体的なアイデア
始めるここでは、2つのコンポーネントの分割を例に挙げます: form1、form2 (読者の便宜のため、命名を批判しないでください) ここで 2 つのコンポーネントがフォーム、ref、model にバインドされている理由は、後で説明します (後のメンテナンスの便宜のため) // フォーム1 コンポーネント <テンプレート> <el-フォーム ref="フォーム" :model="フォーム" ラベル幅="10px" > <el-form-item label="名前" prop="名前"> <el-input v-model="フォーム名" /> </el-form-item> </el-form> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'Form1'、 小道具: { 形状: {} }, データ() { 戻る { ルール: 名前: [ { 必須: true、メッセージ: '名前を入力してください'、トリガー: 'blur' } ] } } }, メソッド: { // ここで親コンポーネントをループして検証validForm()を呼び出します。{ 結果 = false とする this.$refs.form.validate(有効 => 有効 && (結果 = true)) 結果を返す } // ここでは別の方法で書きましたが、ループしてチェックするときには Promise オブジェクトになります。問題があります。大物たちが私にアドバイスをくれることを願っています。validForm() { // ここでの出力構造は明らかにブール値ですが、親コンポーネントのループ呼び出し後はプロミス型なので、変換する必要があります。 return this.$refs.form.validate().catch(e => console.log(e)) } } } </スクリプト> // form2 コンポーネント <テンプレート> <el-フォーム ref="フォーム" :model="フォーム" ラベル幅="10px" > <el-form-item label="年齢" prop="年齢"> <el-input v-model="form.age" /> </el-form-item> </el-form> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'Form2'、 小道具: { 形状: {} }, データ() { 戻る { ルール: 名前: [ { 必須: true、メッセージ: '年齢を入力してください'、トリガー: 'blur' } ] } } }, メソッド: { // ここで親コンポーネントをループして検証validForm()を呼び出します。{ 結果 = false とする this.$refs.form.validate(有効 => 有効 && (結果 = true)) 結果を返す } } } </スクリプト> 親コンポーネントがどのように参照されているかを確認する // 親コンポーネント <テンプレート> <div class="parent"> <form1 ref="form1" :form="formData.form1" /> <form2 ref="form2" :form="formData.form2" /> <el-button type="primary" @click="save">エラー</el-button> </div> </テンプレート> <スクリプト> ...参照を省略すると、export default { 名前: '親'、 ... 登録データを省略する() { 戻る { フォームデータ: { フォーム1: {}, フォーム2: {} } } }, } </スクリプト> formData の属性名 form1 と form2 はそれぞれサブフォーム コンポーネントの ref で使用されるため、トラバーサル中に順番に見つけることができ、保存関数を変更できます。コードは次のとおりです。 メソッド: { 保存 () { //各フォーム オブジェクトのキー値、つまり各フォームの参照値 const formKeys = Object.keys(this.formData) // 各フォームの検証メソッドを実行します const valids = formKeys.map(item => this.$refs[item].validForm()) // すべてのフォームが検証に合格した後のロジック if (valids.every(item => item)) { コンソール.log(11) } } } ref コンポーネントと model コンポーネントの両方が form にバインドされるのはなぜですか?
エクスポートデフォルト{ 小道具: { 形状: { 必須: true、 タイプ: オブジェクト、 デフォルト: () => {} }, }, メソッド: { 有効なフォーム(){ 結果 = false とする this.$refs.form.validate(有効 => 有効 && (結果 = true)) 結果を返す } } } form1 form2 内の minix を参照し、対応するコンポーネント内の対応するプロパティとメソッドを削除します。 結論
Vue+ElementUI が超大型フォームをどのように処理するかについての記事はこれで終わりです。Vue+ElementUI が超大型フォームをどのように処理するかについての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTMLハイパーリンクaタグのhrefジャンプとonclick間の実行順序の例
>>: Nginx+ModSecurity セキュリティモジュールの導入
1. コンポーネントと実装機能Keepalived: Haproxy サービスの高可用性を実現し、...
<em></em> などのフレーズ要素を使用すると、意図した視覚スタイルを維...
Dockerイメージのインポートとエクスポートこの記事では、移行、バックアップ、アップグレードなどの...
1 / Webプロジェクトファイルをwebappsディレクトリに直接コピーするこれは最も一般的に使...
目次手動展開1.アイデアを使ってSpring Bootプロジェクトを作成する2. プロジェクトをJa...
目次1 システムの紹介2 システムショートカット3 一般的なシステムコマンド1 システムの紹介 1....
目次1. はじめに2. 本文2.1 フィールドの連結2.2 フィールドでの算術計算の実行1. はじめ...
1. redisイメージを検索する docker 検索 redis 2. Redisイメージをダウン...
誰もが色にとても敏感だと思います。私たちの目が見るところにはどこにでも色があります。では、CSS で...
最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された...
この記事は主に、純粋な CSS3 を使用して div が順番に出入りする効果を紹介します。一定の参考...
目次背景関数目的アイデアの源成し遂げるセット得るプロパティの削除拡張機能を禁止するもっている要約する...
mysql マスタースレーブ構成1. 準備ホスト: 192.168.244.128スレーブ: 192...
この記事では、Linux のユーザーとグループの管理によく使用されるコマンドをまとめます。ご参考まで...
この記事では、docker pull がリセットされる問題を解決する方法を紹介し、皆さんと共有します...