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

推薦する

TypeScript とは何ですか?

目次1. JavaScriptの問題2. TypeScriptの利点3. TypeScriptの欠点...

Avue でカスタム検索バーを実装し、検索イベントをクリアする実践

目次1. 検索バーの内容をカスタマイズする2. 検索ボタンをカスタマイズする検索バーをカスタマイズし...

モバイルアダプティブスタイルで@mediaを使用する方法

一般的な携帯電話のスタイル: @media all および (orientation : 縦向き) ...

Linux ネットワーク システムの紹介

目次ネットワーク情報ホスト名を変更するDNSドメイン名解決ネットワーク関連コマンドファイアウォール暗...

Vue開発ウェブサイトSEO最適化方法の詳細な説明

ページデータの表示には Vue などの js のデータバインディング機構が使用されるため、クローラー...

HTML でよく使われるメタ百科事典 (推奨)

メタタグは、HTML言語のヘッド領域にある補助タグです。HTML文書のヘッダーにあるヘッドタグとタイ...

JavaScript配列の一般的なメソッドの詳細な説明

目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...

Linux で独自の Nexus プライベート サーバーを構築する方法

この記事では、Linuxサーバー上でDockerを使用してNexusプライベートサーバーを構築する方...

数千万データを持つMySQLテーブルを最適化する実践記録

序文まずここで説明させてください。インターネット上では、Alibaba では 500 万のデータを異...

3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。

マイグレーションアドバンテージ:小型、高速、総所有コストが低い、オープンソース。複数のオペレーティン...

Centos7 Zabbix3.4 メールアラーム設定(メール内容がxx.bin添付ファイルになる問題の解決)

目次1. 監視Linuxホストを追加する2. メールボックスを設定する1. 監視Linuxホストを追...

k8sとDockerの関係についての簡単な説明

最近、プロジェクトでは kubernetes (以下、k8s と表記、k と s の間には 8 つの...

MySQL 完全崩壊: クエリフィルタ条件の詳細な説明

概要実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィ...

インストールされていないバージョンの MySQL を使用する手順とパスワードを忘れた場合の解決策

最初のステップは、圧縮されたパッケージを対応するディスクに解凍することです。 2 番目の手順は、cm...

docker を使用して Django テクノロジー スタック プロジェクトをデプロイする方法

Docker の人気と成熟に伴い、Docker は徐々にプロジェクトをデプロイするための第一の選択肢...