vue+element カスタムクエリコンポーネント

vue+element カスタムクエリコンポーネント

この記事では主に Vue プロジェクトを紹介します。要素の導入を前提として、コンポーネントを 2 回カプセル化し、設定項目を通じて直接レイアウトを実現します。

1. クエリ条件のコンポーネント化

EventBus.jsの使用と組み合わせることで、イベント配信がより効率的になり、さまざまな複雑なライフサイクルの依存関係を回避できます。
components/dataFormフォルダでは、 dataForm.vueがコンポーネントコレクションのキャリアとして使用され、構成項目が作成されます。

1.1 データフォームのコード例

// データフォーム.vue
<テンプレート>
  <el-行>
    <input-form v-for="(item,index) オプション内" :key="'dataForm_'+index"> 
      <!-- 入力ボックス-->
      <入力フォーム
        :key="インデックス"
        v-if="item.type == '入力'"
        :data='アイテム'
      </入力フォーム>
  </el-row>
</テンプレート>
<スクリプト>
「@/assets/js/eventBus.js」からEventBusをインポートします。
InputForm をインポートします "@/components/dataForm/InputForm"
エクスポートデフォルト{
  コンポーネント:
    入力フォーム、
  },
  小道具: {
    /**
     * フォーム構成項目 * @param {Object} オプション 構成パラメータは次のとおりです。
     * タイプ: フォーム項目タイプ、文字列、オプションの値入力
     */
    オプション:
      タイプ: 配列、
      デフォルト() {
        戻る [];
      },
    },
  },
  データ() {
   戻る {}
  },
  作成された() {
   // これは主にドロップダウンボックス内の他のサブコンポーネントの表示と非表示を実現するためです。EventBus.$on("refreshDataForm", e => {
      this.refreshDataForm(e);
    });
  },
  // ページ破棄イベントの破棄 beforeDestroy() {
    EventBus.$off("refreshDataForm")
    EventBus.$off("handleClick")
  },
  メソッド: {
   // フォームデータを更新する refreshDataForm(item) {
      データ = this.options とします
      データ.forEach((e, i) => {
        if (item.type == e.type && item.name == e.name) {
          this.options[i] = アイテム
        }
      })
    },
    // 子コンポーネントのクリックイベントが親コンポーネントに応答し、データが転送されます handleClick(data) {
     EventBus.$emit("handleClick",データ)
    },
    //フォームデータをフォーマットします(必須項目が必須かどうかを確認できます)
    getDataForm() {
     データ = this.options とします
     formObj = {} とします。
     エラー = ''
     試す {
      データ.forEach(e => {
       if (e.type === ''入力) {
        if (e.require && !e.content) {
         error = '入力してください' + e.label
         エラーをスローする
        }
        formObj[e.name] = e.content
       } そうでない場合 (e.type === 'select' || e.type === 'dataSelect') {
        if (e.require && !e.content) {
         エラー = '選択してください' + e.label
         エラーをスローする
        }
        formObj[e.name] = e.content
       } そうでない場合 (e.type === 'date' || e.type === 'dataRadio') {
        if (e.require && !e.content) {
         エラー = '選択してください' + e.label
         エラーをスローする
        }
        フォームオブジェクト[e.beginName] = e.beginRegTime
        フォームオブジェクト[e.endName] = e.endRegTime
       } そうでない場合 (e.type === 'image') {
        formObj[e.name] = e.file || e.content
       } そうでない場合 (e.type === 'アップロード') {
        formObj[e.name] = e.file || e.content
        if (e.delFileName) { // 添付ファイルのコレクションとカスタム名およびデフォルト名を削除します formObj[e.delFileName] = e.delFileIds.join(',')
        } それ以外 {
         formObj['delFileName'] = e.delFileIds.join(',')
        }
       }
      })
      返品フォームObj
     } キャッチ(エラー){
      this.$message({ message:error, type: 'error'})
     }
    }
  }
}

1.2 サブグループ inputForm.vue

注: ここで参照されているコンポーネントは、ページから個別に参照することもできます。

<テンプレート>
  <エル-コル>
    <el-col :span="data.boxSpan?data.boxSpan:boxSpan" v-if="!data.isHide">
     <el-col :span="data.infoSpan?data.infoSpan:infoSpan">
      <el-col :span="data.infoSpan?data.infoSpan:infoSpan" v-if="data.labelSpan!=0">
       <label class="el-form-item_label" :class="{'require': data.require}" v-html="data.label"></label>
      </el-col>
      <el-col :span="data.contentSpan?data.contentSpan:contentSpan" v-if="data.contentSpan!=0">
       <el-input :class="{'base_textarea': data.textarea}" v-modle.trim="data.content" :type="data.textarea?'textarea':''" :disable="data.readOnly" :placeholder="setPlaceholder" maxlength="200"></el-input>
      </el-col>
     </el-col>
      <span v-text="タイトル"></span>
    </div>
  </el-col>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
 小道具: {
  // 入力ボックスタイプを入力します: {
   タイプ: 文字列、
   デフォルト: 'input'
  },
  //デフォルトのフェンスレイアウト 8/24
  ボックススパン: {
   タイプ: 数値、
   デフォルト: 8
  },
  // デフォルトのフェンスレイアウト 24/24
  情報範囲: {
   タイプ: 数値、
   デフォルト: 24
  },
  //デフォルトのフェンスレイアウト 8/24
  スパン: {
   タイプ: 数値、
   デフォルト: 8
  },
  //デフォルトのフェンスレイアウト 16/24
  コンテンツスパン: {
   タイプ: 数値、
   デフォルト: 16
  },
  /**
  * name キーワード * type フォームタイプ * label フォームタイトル * content フォームコンテンツ * readOnly 読み取り専用 デフォルト いいえ * isHide 非表示 デフォルト いいえ * textarea テキストタイプ デフォルト いいえ **/
  データ: {
   タイプ: オブジェクト、
   デフォルト() {
    戻る []
   }
  }
 },
 計算: {
  プレースホルダーを設定する() {
   if(this.data.readOnly && !this.data.content) {
    戻る ''
   } 
   「入力してください」を返す
  }
 }
}
</スクリプト>
<スタイルスコープ>
 // 必須 style.require::after {
  コンテンツ: '*';
  色:赤;
 }
 // フレックスレイアウトのタイトルを垂直に中央揃えします。el-form-item__label {
  フロート:右;
  マージンボトム:0;
  行の高さ: 20px;
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
  最小高さ: 40px;
 }
</スタイル>

1.3 親ページの参照と使用

<テンプレート>
  <el-行>
    <データフォーム:options='searchArray' ref='searchArray'></入力フォーム>
  </el-row>
</テンプレート>

<スクリプト>
 「@/assets/js/eventBus.js」からEventBusをインポートします。
 DataForm をインポートします "@/components/dataForm/dataForm"
 エクスポートデフォルト{
  コンポーネント:
   データフォーム
  },
  データ() {
   戻る {
    // クエリメニュー構成 searchArray: [
     {
      名前: 'personName',
      タイプ: '入力'、
      ラベル: 'ユーザー名',
      コンテンツ: ''
     },
     {
      名前: 'personName2',
      タイプ: '入力'、
      ラベル: 'ユーザー名 2',
      コンテンツ: ''
     }
    ]
   }
  },
  作成された() {
   // 子コンポーネントのパラメータをリッスンする EventBus.$on('refreshDataForm', e => {
    this.refreshDataForm(e)
   })
  },
  破壊された() {
   // サブコンポーネントパラメータを破棄します。EventBus.$off('refreshDataForm')
  },
  メソッド: {
   // サブコンポーネント操作をリッスンする refreshDataForm(e) {
    //ロジックコード this.$forceUpdate()
   },
   //データクエリ handleQuery() {
     // コンポーネントパラメータを取得し、json 形式で返します。let searchArray = this.$refs.searchArray.getDataForm()
    // 必須項目がある場合、戻り値は null となり、ポップアップウィンドウが表示されます if (!searchArray) {
     戻る 
    }
    //クエリインターフェースロジック}
  }
 }
</スクリプト>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueは動的クエリルール生成コンポーネントを実装します
  • Vue コンポーネントを使用して期間別にデータをクエリする方法の詳細な説明
  • Vue 入力ボックスのファジークエリのサンプルコード
  • VueはInput入力ボックスのファジークエリメソッドを実装します
  • Vue.jsはページングクエリ機能を実装します
  • Vueは時間をクリックして期間クエリを取得する機能を実装します
  • Vue.js でのクエリ操作の詳細な例
  • Vue.js フレームワークを使用して列車チケット検索システムを実装する (ソースコード付き)
  • vue.js をベースにページングクエリ機能を実装する
  • Bootstrap4 + Vue2 を使用してページング クエリを実装するサンプル コード

<<:  MySQL 8.0 パスワード有効期限ポリシーの詳細な説明

>>:  HBuilderX で Tomcat 外部サーバーを設定して、JSP インターフェイスを表示および編集する方法の詳細な説明

推薦する

js、css、htmlはブラウザのさまざまなバージョンを決定します

正規表現を使用してIEブラウザのバージョンを判別するIEブラウザかどうか確認するif (docume...

MySQL で複数の主キーが定義されているエラーの解決方法

主キーを作成するには 2 つの方法があります。 テーブルテーブル名を作成( フィールド名タイプ、 フ...

ボタンをクリックしてテキストを入力ボックスに変換し、保存をクリックしてテキスト実装コードに変換します。

ボタンをクリックしてテキストを入力ボックスに変換し、保存をクリックしてテキスト実装コードに変換します...

異なるドメイン名への PC または携帯電話のアクセスを区別するように Nginx を構成する方法

新しい公式サイトはオンラインですが、携帯電話で新しい公式サイトにアクセスすると、エクスペリエンスが非...

KTLツールはMySQLからMySQLへのデータの同期方法を実現します

ktl ツールを使用して、mysql から mysql にデータを同期します。 1. 新しいジョブス...

Linux でディスクをマウントし、起動時に自動的にマウントするように設定する方法

皆さんの時間は貴重だと承知しているので、プロセス コマンドを直接書き留めておきます。設定できます。原...

Django+Mysql+Redis+Gunicorn+NginxのDockerデプロイメントの実装

I. はじめにDockerテクノロジーは現在非常に人気があります。コンテナを介してプロジェクト環境を...

HTML ユーザー登録ページ設定ソースコード

上記の Web ページをデザインします。 <!DOCTYPE html> <htm...

CSS における px、em、rem、pt の特徴、違い、変換について詳しく説明します。

コンセプト紹介: 1. px (ピクセル):仮想的な長さの単位で、コンピュータ システムのデジタル画...

JavaプログラミングでJavaScriptの超実用的なテーブルプラグインを書く

目次効果ドキュメント最初のステップステップ2ステップ3ソースコード効果ドキュメント最初のステップta...

CSS3 疑似クラスセレクターの簡単なレビュー

序文CSS がフロントエンド開発の基本的なスキルであるならば、「セレクター」は基礎中の基礎です。これ...

WINDOWS での MYSQL のインストールに関する詳細なチュートリアル

1. インストールパッケージをダウンロードする- お使いのコンピュータシステムに応じて適切なバージョ...

複数のネットワークカードを備えた Linux システムでのルーティング構成の詳細な説明

Linux でのルーティング設定コマンド1. ホストルーティングを追加する ルートを追加 -host...

ウェブページの右側に固定されたフローティングレイヤーの実装コード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...