要素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 つのツール

推薦する

スライドドアを実装するための CSS サンプルコード

いわゆるスライディングドアテクノロジーとは、さまざまな長さのテキストに合わせてボックスの背景を自動的...

nginx のフロントエンドとバックエンドに同じドメイン名を設定する方法

この記事では、主にnginxのフロントエンドとバックエンドに同じドメイン名を設定する方法を紹介し、皆...

イントラネット侵入を実現するためのSSHポート転送

LAN 内のマシンは外部ネットワークにアクセスできますが、外部ネットワークは内部ネットワークにアクセ...

JavaScript で 9 グリッドのモバイル パズル ゲームを実装

この記事では、Jiugonggeモバイルパズルゲームを実装するためのJavaScriptの具体的なコ...

CSS 向け SASS スタイル プログラミング ガイド

SASS を使用する開発者が増えるにつれて、SASS コードの数に注意する必要があります。 SASS...

MySQL トリガー: 複数のトリガー操作の作成例の分析

この記事では、例を使用して、MySQL で複数のトリガー操作を作成する方法について説明します。ご参考...

フォームファイル選択ボックスのスタイルをカスタマイズする例

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

JavaScript のフラット配列をツリー構造に変換する例

目次バックグラウンドで10,000個のデータが失われた再帰法非再帰的方法要約するバックグラウンドで1...

Vue の要素カレンダー コンポーネントを使用したサンプル コード

まず効果図を見てみましょう: 完全なコードは添付されています <テンプレート> <...

ドメイン名、ポート、異なるIPに基づくnginx仮想ホスト設定の実装

1. nginx仮想ホストの設定仮想ホストを使用すると、実行する Web サイトごとに個別の Ngi...

HTML+CSS をベースにした素敵なフリップログインおよび登録インターフェースを作成します

素敵なフリップログインと登録インターフェースを作成する序文最近、ネットワーク ディスクを構築しようと...

フローチャートとUIフローの違い

UI デザインにおける多くの概念は言葉で言えば似ているように見えるかもしれませんが、実際には大きく異...

MySQLデータの同時更新を処理する方法

UPDATE はロックしますか?以下のような場合、SQL文はロックされますか? テーブル1を更新しま...

スタートアップ企業が丹念に作り上げた優れたウェブデザイン17選

スタートアップ企業は、型破りな仕事のやり方、ユニークなビジネスモデル、特徴的な製品やサービス、パーソ...

セマンティックHTML構造を理解する方法

HTML と CSS は誰もが知っていると思います。HTML の構造と CSS の表現の分離も知って...