最近、社内の業務調整により、以前の超長文のロジックが大幅に変更されたため、リファクタリングする予定です(退職したバックエンドスタッフが以前書いたもので、コメントはありません。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 セキュリティモジュールの導入
序文:先週の日曜日、先輩から3ページ作るのを手伝って欲しいと頼まれました。データのやり取りなどはなく...
JSON (JavaScript Object Notation、JS Object Notatio...
目次1. プロジェクトフォルダ構造1. アセットフォルダ2. 図書館3. ローカル設定(ローカル) ...
<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...
ページが非常に長い場合は、下にさらにコンテンツがあることをユーザーに知らせるために矢印が必要になるこ...
許可ベースの電子メール マーケティングにより、マーケティングとプロモーションのコストを大幅に削減でき...
目次1. Tsとは何か2. 基本的な文法1. プリミティブデータ型を宣言する2. オブジェクト型を宣...
最近、MySQL 5.6 を導入しましたが、デフォルトでは MySQL はローカル サービスのみを許...
<table>テーブルデータをJSON形式に変換するJavaScript関数は次のとおり...
私は全体のプロセスを 4 つのステップに分けます。 JDKをダウンロードしてインストールするTomc...
目次1. 手ぶれ補正2. スロットリング3. まとめ序文:フロントエンド開発者には、次の 2 つの要...
目次序文1. 共通オブジェクトを反復処理するには for...of を使用します2. 通常のオブジェ...
この記事では、例を使用して、MySQL イベントの変更 (ALTER EVENT)、イベントの無効化...
MySQL で判断文を書く方法:方法1. CASE関数case関数の構文: CASE条件 値1の場合...
持つことの使用法having 句を使用すると、グループ化後にさまざまなデータをフィルター処理できます...