要素UIポップアップコンポーネントをカプセル化する手順

要素UIポップアップコンポーネントをカプセル化する手順

el-dialogをコンポーネントとしてカプセル化する

element-ui を使用する場合、ポップアップ ウィンドウに多くのコンテンツが含まれている場合は、次のようにポップアップ ウィンドウをコンポーネントにカプセル化することがよくあります。

<!-- 詳細ダイアログ.vue html -->
<テンプレート>
 <el-dialog title="タイトル" :visible.sync="表示" width="720px" >
  <p>ポップアップコンテンツ</p>
 </el-ダイアログ>
</テンプレート>
// 詳細ダイアログ.vue.js
<スクリプト>
 小道具: {
  見える:
   タイプ: ブール値、
   デフォルト: false
  }
 }
</スクリプト>

el-dialogはプロパティを変更し、エラーを報告します

しかし、問題があります。ポップアップシャドウをクリックするなど、el-dialog 内の終了イベントがトリガーされると、現在のコンポーネントの props [visible] を変更するイベントが発行されます。コンポーネントは prop 属性を直接変更できないため、エラーが報告されます。

props [visible]の変更と取得をインターセプトするための中間変数innerVisibleを追加しました。

<!-- 詳細ダイアログ.vue html -->
<テンプレート>
 <el-dialog title="タイトル" :visible.sync="innerVisible" width="720px" >
  <p>ポップアップコンテンツ</p>
 </el-ダイアログ>
</テンプレート>
// 詳細ダイアログ.vue.js
<スクリプト>
エクスポートデフォルト{
 小道具: {
  見える:
   タイプ: ブール値、
   デフォルト: false
  }
 },
 計算: {
  内部表示: {
   取得: 関数() {
    this.visible を返す
   },
   設定: 関数(val) {
    this.$emit('update:visible', val)
   }
  }
 }
}
</スクリプト>

このように、el-dialog内でprop[visible]を変更する場合、propsを直接変更しないように、emit('update:')を介して親コンポーネントに通知します。もちろん、親コンポーネントは変更を受け入れるために sync 修飾子を追加する必要があります。

<!-- father.vue html -->
<詳細ダイアログ:visible.sync="詳細表示" />

これまでのところ、カプセル化されたポップアップ コンポーネントに問題はありません。

引き続き最適化し、v-modelを使用して表示と非表示を制御します。

// 詳細ダイアログ.vue.js
<スクリプト>
エクスポートデフォルト{
 モデル: {
  prop: 'visible', // v-model にバインドされた props 名を変更します event: 'toggle' // v-model にバインドされたカスタム イベント名を変更します },
 小道具: {
  見える:
   タイプ: ブール値、
   デフォルト: false
  }
 },
 計算: {
  内部表示: {
   取得: 関数() {
    this.visible を返す
   },
   設定: 関数(val) {
    this.$emit('update:toggle', val)
   }
  }
 }
}
</スクリプト>

v-model に接続すると、よりエレガントですっきりとした使用感になります。

<!-- father.vue html -->
<詳細ダイアログ v-model="詳細表示可能" />

最適化とミックスインへのカプセル化を継続

ポップアップコンポーネントが頻繁にカプセル化される場合、上記のロジックも常にコピーされる必要があるため、上記のコントロールの表示と非表示のロジックをmxinに最適化してカプセル化し、直接再利用できるようにします。

// vModelDialog.js
エクスポートデフォルト{
 モデル: {
  プロパティ: '表示'、
  イベント: 'トグル'
 },
 小道具: {
  見える:
   タイプ: ブール値、
   デフォルト: () => {
    偽を返す
   }
  }
 },
 計算: {
  内部表示: {
   取得: 関数() {
    this.visible を返す
   },
   設定: 関数(val) {
    this.$emit('toggle', val)
   }
  }
 }
}

次に、ポップアップ プラグインをカプセル化するときに、表示と非表示のロジックを完了するためにミックスインを導入するだけで済みます。

// 詳細ダイアログ.vue js
<スクリプト>
'./vModelDialog.js' から vModelDialog をインポートします。
エクスポートデフォルト{
 ミックスイン: [vModelDialog],
}
</スクリプト>

上記は、element-ui ポップアップ コンポーネントのパッケージ化手順の詳細な内容です。element-ui ポップアップ コンポーネントのパッケージ化の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • VueはElement-uiをベースにテーブルポップアップコンポーネントを実装します
  • Elementのメッセージポップアップウィンドウが繰り返しポップアップする問題の解決
  • Vue+Element UI でサマリーポップアップウィンドウを実装するプロセス全体
  • vue+elementui ユニバーサルポップアップウィンドウの実装 (追加+編集)
  • element-ui でダイアログ ポップアップ ウィンドウを閉じることができない問題の解決方法
  • Vue の要素 UI と echarts を使用したポップアップ ウィンドウ間の問題の詳細な説明
  • 要素はポップアップウィンドウコンポーネントのレベルの実装を変更します

<<:  Mysql5.7.14 インストールと設定方法操作グラフィックチュートリアル(パスワード問題解決)

>>:  Linux コマンドラインターミナルで画面を分割するための 2 つのツール

推薦する

VMware 仮想マシン ブリッジ モードでインターネットにアクセスできない問題を解決する方法

ステップ1: ローカルイーサネットプロパティをチェックして、VMwareブリッジプロトコルがインスト...

MySQL でタイムゾーンを表示および変更する方法

今日、プログラムが間違った時刻を挿入し、フィールドがデフォルト値 CURRENT_TIMESTAMP...

JavaScript ではおそらく switch 文を使う必要はない

目次スイッチも複雑なコードブロックもありませんPythonからのインスピレーション辞書を使用してスイ...

デザイン理論:計画、リソース、コミュニケーションの問題について

<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...

Vue3 ベースのスクリプト設定構文 $refs の使用

目次1. Vue2 構文2. Vue3の使用1. コンポーネントのref値を設定する2. コンポーネ...

MySQL マルチテーブル共同クエリ操作例の分析

この記事では、MySQL のマルチテーブル共同クエリ操作について説明します。ご参考までに、詳細は以下...

Linux の圧縮および解凍コマンドの紹介

目次一般的な圧縮形式: gz .bz2 .xz .zip一般的に使用されるアーカイブは圧縮を必要とす...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

Javascript ツリー メニュー (11 項目)

1. dhtmlxツリー dHTMLxTree は機能豊富なツリー メニュー コントロールです。豊...

el-select のスタイルを変更する方法の詳細な説明: popper-append-to-body と popper-class

elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...

MySQL の左結合操作における on 条件と where 条件の違いの紹介

優先度両方のケースで同じ条件を設定すると、異なる結果セットが生成される可能性があるのは、優先順位のた...

LinuxベースのLVMシームレスディスク水平拡張の詳細な説明

環境名前財産CPU 5650 円メモリ4Gディスク20G+4TB この時点で、サーバーにはすでに次の...

Vue の長いリストをすばやく読み込む方法

目次背景メインコンテンツ1. コンポーネントの比較2. 実装のアイデア3. キーメソッドソースコード...

Linuxでmysqlの定期的なコールドバックアップを実装するためにmysqldump+expect+crontabを使用するアイデアの詳細な説明

目次1. 遭遇した問題2. アイデア3. コード1. 遭遇した問題私たちは皆、mysqldump を...

js の getBoundingClientRect() メソッドの詳細な説明

1. getBoundingClientRect() 分析getBoundingClientRect...