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

推薦する

Vuexの補助関数の使い方

目次マップ状態マップゲッターマップミューテーションマップアクション複数のモジュールマップ状態 ...

MySQL DMLステートメントの使用に関する詳細な説明

序文:前回の記事では、注意深い学生であれば発見できたかもしれない DDL ステートメントの使用法を中...

純粋なCSS3で実装されたネオンライト効果

達成される効果は次のとおりです。 マウスがボタン内に移動すると、ネオンライトのような効果が生成され、...

JavaScript 関数はランダムな色の検証コードをカプセル化します (完全なコード)

数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...

ネイティブ JavaScript を使用した Web 計算機の実装

この記事では、参考までに、計算機のWebバージョンを実装するためのJavaScriptの具体的なコー...

単一行関数と文字計算日付プロセス制御を説明する MySQL の例

目次1. キャラクター機能1. ケースコントロール機能2. キャラクターコントロール機能2. 数学関...

HTML ページでギリシャ文字を使用する方法

ギリシャ文字は、特に数学や物理学などの科学技術分野で非常によく使用される記号列であり、特定の意味を持...

理論: 2年間のユーザーエクスペリエンス

<br />国内のウェブサイトが本格的に普及し、ユーザーエクスペリエンスに重点が置かれる...

Baidu百科事典UIの開発動向について議論する

<br />百度百科事典の正式版がついにオンラインになりました。2年間の「テスト版」の帽...

vue_drf は SMS 認証コードを実装します

目次1. 需要1. 需要2. SDKパラメータ設定1. ディレクトリ構造3. コードの実装1. バッ...

Tomcatを使用して共有ライブラリを設定し、同じjarを共有する

デプロイされるプロジェクトが増えるにつれて、Tomcat にデプロイされるリリース パッケージも増え...

ウェブページ上の小さなスペースに大きな画像を配置する方法

出典: www.bamagazine.comウェブページのバナー、ニュースの見出しの周りのスペース、...

HTML テーブル境界制御実装コード

一般的に、テーブルを使用する場合は、常に <table border="1"...

MySqlエスケープの詳細な使用例

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...