背景プロジェクトでダイアログ ボックスを使用する一般的な方法は、ダイアログ ボックスをコンポーネントにカプセル化し、使用する場所にインポートしてテンプレートに追加し、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アカデミー
導入振り返ってみると、4年前、私がMySQLのインデックスについて学んでいたとき、先生はインデックス...
ストレージエンジンデータベース ストレージ エンジンとは何ですか?データベース エンジンは、データベ...
背景:かなり前(2017.6.5、記事にはタイムリーさがあり、特に使用されているツールは頻繁に更新さ...
1行のコマンド docker run -d \ -v /share:/home/vsftpd \ -...
####システム内の入出力の管理#### 1. システムの入力と出力のリダイレクトを理解する入力リダ...
目次1. 数学関数2. 文字列関数3. 日付関数4. 暗号化機能主な MySQL 関数は次のように紹...
1.ページを XML タイプとして宣言しないでください。ページでは UTF-8 または UTF-16...
この記事の例では、商品スクリーニング機能を実装するためのjsの具体的なコードを参考までに共有していま...
数十 MB 程度の小さいものから 1G 以上の大きいものまで、ビデオ ファイルなどのファイルのアップ...
まずは効果を確認実装コード <div class="box box1"&g...
CentOS公式サイトアドレスhttps://www.centos.org/まず必要なファイルをダウ...
目次tinymce、tinymce ts、tinymce-vue 宣言ファイルをインストールするパッ...
この記事では、簡単なドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...
以下のように表示されます。主に認証コマンドを実行します: 2つの方法1. 任意のホストがユーザー b...