最近、社内の業務調整により、以前の超長文のロジックが大幅に変更されたため、リファクタリングする予定です(退職したバックエンドスタッフが以前書いたもので、コメントはありません。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 セキュリティモジュールの導入
MySQL の仕様によっては、テーブル作成仕様にすべてのフィールドが空であってはならないという要件を...
序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...
ボックスモデルの計算<br />マージン + ボーダー + パディング + コンテンツC...
実験環境• 最小限のインストール済みの CentOS 7.3 仮想マシン• 構成: 1 コア/512...
目次1. 自己増分値はどこに保存されますか? 2. 自己価値修正メカニズム3. 自動増分値を変更する...
元のコード: center.html : <!DOCTYPE html> <htm...
行内では、明るい境界線の色を個別に定義できます。基本的な構文<TR ボーダーカラーライト=co...
1. Windows 版の Docker をインストールしたら、Docker クイックスタート ター...
1. Ubuntu Server 18.04.5 LTS システムのインストールUbuntuはデスク...
最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...
計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...
1. 絶対位置とマージンを使用するこの方法の原則は、左側と右側をドキュメントの流れから外れるように配...
まとめHTML: 要素と v-cloak CSS: [v-cloak]{表示: なし}プロセスページ...
名前を格納するフィールドが GBK 文字セットを使用している場合、GBK 内部コード自体がエンコード...
この効果と同様に、方法も非常に簡単です。ヘッダーに次のように記述します: <link rel=...