背景プロジェクトでダイアログ ボックスを使用する一般的な方法は、ダイアログ ボックスをコンポーネントにカプセル化し、使用する場所にインポートしてテンプレートに追加し、visible.sync を使用してダイアログ ボックスの表示/非表示を制御し、確認イベントをリッスンしてユーザーの [OK] クリックを処理することです。次のように: <確認ダイアログ v-if="確認ダイアログ表示" :title="$t(`mineData.tips.deleteDataset`)" :visible.sync="ダイアログの表示を確認" @confirm="確認ハンドラー" </確認ダイアログ> カプセル化されたダイアログでは、閉じるときに表示を更新し、確認時に確認イベントをトリガーする必要もあります。 メソッド: { 近い() { this.$emit("update:visible", false); }, 確認する() { これを閉じます。 this.$emit("確認"); } } このアプローチでは、ページの初期化時にすべてのダイアログ コンポーネントが導入されるため、読み込み速度に影響するだけでなく、ページに多くのダイアログ ボックスが導入されると多くの問題が発生し、ページが非常に乱雑になります。ダイアログ ボックスごとに HTML のセクションを挿入し、ダイアログ ボックスごとに個別の表示変数を維持し、ダイアログ ボックスごとに確認イベント リスナーを追加する必要があります... これらの操作のほとんどはビジネスとは無関係であり、非常に似ています。 では、js を通じてダイアログを動的に作成する方法はあるのでしょうか? ダイアログを作成します("confirm-dialog.vue"); 上記と同様に、visible を定義したり、HTML やイベント コールバックを多数追加したりすることなく、ファイル名に応じてダイアログ ボックスを開くことができます。また、最初にダイアログ コンポーネントを導入する必要もありません。 簡単じゃないですか!興奮していますか?読み続けてください。 成し遂げる1. カプセル化された /utils/dialogControl.js'vue' から Vue をインポートします 非同期関数createDialog(ファイル名、データ){ const ダイアログコンテキスト = require.context( '../components', // 検索ファイルの範囲を定義します true, /([a-zA-Z\-0-9]+)\.vue$/, // ファイル名ルール 'lazy' を定義する ) // 渡された名前のファイルを検索してロードします。let match = dialogsContext.keys().find((key) => key.includes(fileName)) if (!match) を返す コンポーネントコンテキストをawait dialogsContext(match) にします。 temp = componentContext.default とします 新しいPromise(function(resolve,reject))を返す{ // 設定パラメータを初期化する let opt = { データ } コンポーネントをObject.assign({}, temp)とします。 initData = { 表示: true } オブジェクトにデータを割り当てます。 opt.data && Object.assign(initData, JSON.parse(JSON.stringify(opt.data))) コンポーネント.データ = 関数 () { initDataを返す } // インスタンスを作成してマウントするためのコンストラクタを作成します。let DialogC = Vue.extend(component) ダイアログを新しいDialogC()にします // 閉じるイベント let _onClose = dialog.$options.methods.onClose ダイアログ.onClose = 関数 () { 解決する() ダイアログ.$destroy() _onClose && _onClose.call(ダイアログ) document.body.removeChild(ダイアログ.$el) } // コールバックイベント let _onCallback = dialog.$options.methods.onCallback dialog.onCallback = 関数 (...引数) { 試す { _onCallback && _onCallback() 解決(引数) ダイアログ.$destroy() _onClose && _onClose.call(ダイアログ) document.body.removeChild(ダイアログ.$el) } キャッチ (e) { コンソール.log(e) } } ダイアログ.$mount() // 閉じるボタンをクリックすると表示が変わります ダイアログ.$watch('visible', 関数(n, o) { ダイアログ === false && dialog.onClose() }) document.body.appendChild(ダイアログ.$el) }) } エクスポート {createDialog} 例: 2. 開くダイアログファイルに一致するfileNameパラメータを受け取り、dataパラメータはダイアログ ボックスに渡されるデータであり、コンポーネントのデータにマージされます。 3. 可視変数を使用してダイアログボックスの表示/非表示を制御する 4.ダイアログボックスを閉じるonCloseメソッドを定義します。これを使用してダイアログボックスを閉じることができます。 5. onCallbackメソッドは、OKボタンをクリックしたときに親コンポーネントに値を渡すなど、ダイアログボックスを呼び出す親コンポーネントに値を渡すために使用されます。 2.ダイアログファイルの定義たとえば、/components/ConfirmDialog.vue では、visible 変数は表示/非表示を制御するために使用され、onClose は閉じるイベントを処理し、確認ボタンのコールバックは onCallback です (これは dialogControl.js の定義と一致しています)。 <テンプレート> <el-dialog title="プロンプト" :visible.sync="visible" width="30%"> <span>Lorem、ipsum dolor sit amet consectetur adipisicing elit。Nesciunt quis perspiciatis fugiat molestiae provident accusantium repudiandae fugit について ミニマ、イーク、リペラト キブスダム イステ セッド 広告? デビティス クイ プレセンティウム マイナスインシデントエッセ! <span slot="フッター" class="ダイアログフッター"> <el-button @click="onClose">キャンセル</el-button> <el-button type="primary" @click="onCallback(true)">OK</el-button> </span> </el-ダイアログ> </テンプレート> <スクリプト> エクスポートデフォルト{ データ () { 戻る {} }, メソッド: { }} </スクリプト> 3. 使用dialogControl に createDialog メソッドを導入し、ファイル名を直接渡して開きます。 他の属性がある場合は、キーと値のペアの形式で 2 番目のパラメータに入力します。これらの属性はダイアログ コンポーネントのデータにマージされるため、ダイアログ コンポーネントで直接使用できます。 createDialog メソッドは promise オブジェクトを取得し、その then メソッドは confirm によって返された結果を取得できます。 <テンプレート> <div> <h1>これはショーページです</h1> <el-button type="primary" @click="openDialog">開く</el-button> </div> </テンプレート> <スクリプト> 「@/utils/dialogControl」から createDialog をインポートします。 エクスポートデフォルト{ メソッド: { オープンダイアログ() { ダイアログを createDialog("confirm-dialog.vue"); ダイアログ.then((v) => { もし(動詞){ console.info("OK"); } }); }, }, }; </スクリプト> 効果は以下のとおりです。 この記事の冒頭にある方法を使用してダイアログ ボックスを呼び出している場合は、急いでこの方法を使用してください。 参照: https://www.freesion.com/article/43311065748/ vue+el-element でファイル名に基づいてダイアログを動的に作成する実践についての記事はこれで終わりです。el-element によるダイアログ コンテンツの動的作成に関するより関連性の高い記事については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CentOS 7.6 仮想ネットワーク カードのバッチ追加、変更、削除操作の紹介
>>: HTMLフレームワーク_Powernode Javaアカデミー
この記事では、二次リンク効果を実現するためのReact+tsの具体的なコードを参考までに共有します。...
1. 基本的な手順1: yarn add vue-i18nをインストールするこのパスに新しい .js...
最初のステップは、MySQL 8.0.23の無料インストールバージョンをダウンロードすることです。 ...
<br />条件付きコメントはIEシリーズ製品上でXHTMLコード処理を分離して行うこと...
1. Dockerネットワークを作成する docker ネットワーク作成 kong-net 2. デ...
最近、Yahoo の 34 の黄金律を読み、ウェブサイトのパフォーマンスを最適化する方法を学びました...
Linux システムでは、環境変数は適用範囲に応じて、システムレベルの環境変数とユーザーレベルの環境...
Navicatをインストールした後次のエラーが発生する場合があります: Client does no...
MySQLデータベースをダウンロードするには、https://dev.mysql.com/down...
この記事では、WeChatミニプログラムで電子署名を実装するための具体的なコードを参考までに紹介しま...
ここには複数の Tomcat があります。それらを同時に使用する場合は、ポート番号を別の番号に変更す...
目次1 つの Redis 設定ファイル2 Dockerコマンドの開始3 docker-compose...
[LeetCode] 180. 連続した数字少なくとも 3 回連続して出現するすべての数字を検索す...
効果画像: html: <div class='site_bar'>ホー...
目次1. 事前準備1.1 Node.jsをインストールする1.2 webpackをインストールする1...