Vue3 手動カプセル化ポップアップ ボックス コンポーネント メッセージ メソッド

Vue3 手動カプセル化ポップアップ ボックス コンポーネント メッセージ メソッド

この記事では、ポップアップボックスコンポーネントメッセージのVue3手動カプセル化の具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

パッケージコンポーネント

<テンプレート>
  <トランジション名="下">
    <div class="xtx-message" :style="style[type]" v-show='isShow'>
      <!-- スタイルは上にバインドされています -->
      <!-- 異なるプロンプトアイコンが変更されます-->
      <i class="iconfont" :class="[style[type].icon]"></i>
      <span class="text">{{text}}</span>
    </div>
  </トランジション>
</テンプレート>
<スクリプト>
'vue' から { onMounted, ref } をインポートします。

エクスポートデフォルト{
  名前: 'XtxMessage',
  小道具: {
    文章: {
      タイプ: 文字列、
      デフォルト: ''
    },
    タイプ: {
      タイプ: 文字列、
      // 警告 警告 エラー エラー 成功 成功 デフォルト: 'warn'
    }
  },
  設定 () {
    // 3つのスタイルを含むオブジェクトを定義します。オブジェクトキーは文字列型です。const style = {
      警告:
        アイコン: 'アイコン警告'、
        色: '#E6A23C',
        背景色: 'rgb(253, 246, 236)',
        境界線の色: 'rgb(250, 236, 216)'
      },
      エラー: {
        アイコン: 'icon-shanchu',
        色: '#F56C6C',
        背景色: 'rgb(254, 240, 240)',
        境界線の色: 'rgb(253, 226, 226)'
      },
      成功: {
        アイコン: 'icon-queren2',
        色: '#67C23A',
        背景色: 'rgb(240, 249, 235)',
        境界線の色: 'rgb(225, 243, 216)'
      }
    }
    // アニメーションを制御する const isShow = ref(false)
    // onMounted をトリガーします(() => {
      isShow.value = true
    })
    { style, isShow } を返します
  }
}
</スクリプト>
<style スコープ lang="less">
。下 {
  &-入力 {
    &-から {
      変換: translate3d(0, -75px, 0);
      不透明度: 0;
    }
    &-アクティブ {
      遷移: すべて 0.5 秒;
    }
    &-に {
      変換: なし;
      不透明度: 1;
    }
  }
}
.xtxメッセージ{
  幅: 300ピクセル;
  高さ: 50px;
  位置: 固定;
  zインデックス: 9999;
  左: 50%;
  左マージン: -150px;
  上: 25px;
  行の高さ: 50px;
  パディング: 0 25px;
  境界線: 1px 実線 #e4e4e4;
  背景: #f5f5f5;
  色: #999;
  境界線の半径: 4px;
  私 {
    右マージン: 4px;
    垂直位置合わせ: 中央;
  }
  。文章 {
    垂直位置合わせ: 中央;
  }
}
</スタイル>

Vueのプロトタイプオブジェクトにマウント

// 次のメソッドはプロンプト効果をレンダリングする必要があります import { createVNode, render } from 'vue'
'./xtx-message.vue' から XtxMessage をインポートします。

// DOM コンテナを動的に作成する const div = document.createElement('div')
div.setAttribute('クラス', 'xtxメッセージコンテナ')
ドキュメント本体に子要素を追加します。

エクスポート デフォルト ({ テキスト、タイプ }) => {
  タイマーを null にする
  // createVNode は仮想ノードを作成するために使用されます // パラメータ 1 はコンポーネントをサポートします // パラメータ 2 はコンポーネントに渡されるオプションを表します const vnode = createVNode(XtxMessage, { text, type })
  // 仮想ノードをページの DOM にレンダリングします // レンダリング関数のパラメータ // パラメータ 1: レンダリングするコンテンツ (仮想ノード) を示します
  // パラメータ 2: レンダリングのターゲット位置 (DOM 要素) を示します
  レンダリング(vnode, div)

  // プロンプトメッセージが1秒後に消えることを期待する clearTimeout(timer)
  タイマー = setTimeout(() => {
    // div の内容をクリアします render(null, div)
  }, 1000)
}

// $message({ text: 'ログインに失敗しました', type: 'error'})
'./Message' からメッセージをインポートします
エクスポートデフォルト{
  インストール(アプリ) {
    // グローバルプロパティをマウントしたい場合は、コンポーネントインスタンスを通じてプロパティ this.$message を呼び出すことができます。
    app.config.globalProperties.$message = Message // プロトタイプ関数}
}

使用

1つ。

'@/components/library/Message' からメッセージをインポートします。
設定 () {
    // ログインをトリガーする const handleLogin = async () => {
      // 手動フォーム検証 const flag = await target.value.validate()
      if (フラグ) {
        // 検証に合格したら、ログインするためのインターフェースを呼び出します // ログインに失敗した場合は、Message({ type: 'error', text: 'ログインに失敗しました' }) を表示します
      }
    }
    マウントされた(){
      this.$message({ type: 'error', text: 'ログインに失敗しました' })
    }
}

二。

// コンポーネントのインスタンスオブジェクトを取得します。前の this と同様です
    定数インスタンス = getCurrentInstance()
     // クリックしてログイン const handleLogin = async () => {
      const 有効 = ターゲット.値.検証() を待機します
      (有効)の場合{
        // フォーム検証に合格しました。ログインするためのインターフェースを呼び出します // Message({ text: 'ログインに失敗しました', type: 'error' })
        instance.proxy.$message({ text: 'ログインに失敗しました', type: 'error' })
      }
    }

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明
  • Vue3 はメッセージコンポーネントの例を実装します
  • vue をベースにしたグローバルメッセージコンポーネントを作成する
  • Vue での el-message のカプセル化と使用

<<:  SQLは、隣接する2行のデータに対して加算、減算、乗算、除算の演算を実行します。

>>:  Excel エクスポートは docker 環境では常に失敗する

推薦する

Nginx 構成 クロスドメイン リクエスト Access-Control-Allow-Origin * 詳細な説明

序文403 クロスオリジン エラーが発生しNo 'Access-Control-Allow-...

ホワイトボードを踏まないようにするゲームを実装するための HTML+CSS+JS

目次背景1. 思考分析2. ページ構成2.1 HTML レイヤー2.2 CSS レイヤー2.3 JS...

XHTML 入門チュートリアル: Web ページのヘッダーと DTD

ヘッドと DTD はページには表示されませんが、Web ページの重要な要素です。 なぜ失敗したのでし...

パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...

Linuxでディレクトリを効率的に切り替える方法

Linux でディレクトリを切り替えるとなると、誰もが間違いなくcdコマンドを思い浮かべるでしょう。...

Linux で MySQL 8.0 サービスを完全に削除する方法

この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...

Vueはマルチタブコンポーネントを実装します

効果を直接確認するために、リロード、左を閉じる、右を閉じる、その他の機能を閉じるなどの右クリック メ...

Linux の who コマンド例の紹介

誰についてシステムにログインしているユーザーを表示します。 who コマンドを実行すると、現在システ...

MySQL 5.0.96 for Windows x86 32 ビット グリーン簡易版インストール チュートリアル

MySQL 5.0 は、いくつかの「高度な機能」があるため定番となっています。これは、Windows...

MySQL 8.0.22 winx64 のインストールと設定方法のグラフィックチュートリアル

MySQL-8.0.22-winx64のデータベースインストールチュートリアルは参考になります。具体...

Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

この記事では主に、Vue を使用してタブ ナビゲーション バーを実装し、flex レイアウトを使用し...

Vue はカスタム「モーダル ポップアップ ウィンドウ」コンポーネントのサンプル コードを実装します

目次序文レンダリングサンプルコード要約する序文ダイアログ ボックスは非常に一般的なコンポーネントであ...

負荷分散と動的および静的分離操作を実現するDocker NginxコンテナとTomcatコンテナ

Tomcat8 イメージをダウンロード [root@localhost ~]# docker sea...

Linux自動ログイン例の説明

インターネット上には、expect を使用して自動ログインを実現するスクリプトが多数存在しますが、明...

Navicat が MySQL に接続するときに発生する 1045 エラーの解決方法

ローカル データベースに接続すると、Navicat for MySQL は以下のように 1045 エ...