Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

Vue3 カプセル化メッセージプロンプトインスタンス関数

  • Vue2.0 はVue.prototype.$message = function () {}を使用します。
  • vue3.0 は、プロトタイプ メソッドをマウントするために app.config.globalProperties を使用しますapp.config.globalProperties.$message = Message
  • また、import Message from './Message.js'を使用して関数を直接インポートすることもサポートしています。

スタイルレイアウトカプセル化メッセージ.vue

<テンプレート>
  <トランジション名="下">
    <div class="my-message" :style="style[type]" v-show='isShow'>
      <!-- スタイルは上にバインドされています -->
      <!-- 異なるプロンプトアイコンが変更されます-->
      <i class="iconfont" :class="[style[type].icon]"></i>
      <span class="text">{{text}}</span>
    </div>
  </トランジション>
</テンプレート>
<スクリプト>
'vue' から { onMounted, ref } をインポートします。
エクスポートデフォルト{
  名前: 'myMessage',
  小道具: {
    文章: {
      タイプ: 文字列、
      デフォルト: ''
    },
    タイプ: {
      タイプ: 文字列、
      // 警告 警告 エラー エラー 成功 成功 デフォルト: '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;
    }
  }
}
.私のメッセージ{
  幅: 300ピクセル;
  高さ: 50px;
  位置: 固定;
  zインデックス: 9999;
  左: 50%;
  左マージン: -150px;
  上: 25px;
  行の高さ: 50px;
  パディング: 0 25px;
  境界線: 1px 実線 #e4e4e4;
  背景: #f5f5f5;
  色: #999;
  境界線の半径: 4px;
  私 {
    右マージン: 4px;
    垂直位置合わせ: 中央;
  }
  。文章 {
    垂直位置合わせ: 中央;
  }
}
</スタイル>

関数実装 message.js

//icon//textimport { createVNode,render } を 'vue' からインポートします
'./message.vue' から myMessage をインポートします。
// DOM コンテナを動的に作成する const div = document.createElement('div')
div.setAttribute('クラス','私のメッセージコンテナ')
ドキュメント本体に子要素を追加します。
エクスポートデフォルト ({テキスト、タイプ})=>{
  タイマーを null にする
  //createVNode は仮想ノードを作成するために使用されます // パラメーター 1 はコンポーネントをサポートします // パラメーター 2 はコンポーネントに渡されるオプションを表します const vnode = createVNode(myMessage,{text, type})
// 仮想ノードをページの DOM にレンダリングします // レンダリング関数のパラメータ // パラメータ 1: レンダリングするコンテンツ (仮想ノード) を示します
// パラメータ 2: レンダリングのターゲット位置 (DOM 要素) を示します
   レンダリング(vnode,div)
 // 1秒後に消えることを期待する clearTimeout(timer)
   タイマー = setTimeout(()=>{
     // div の内容をクリアします render(null,div)
   },1000)
}
// $message({ text: 'ログインに失敗しました', type: 'error'})

カスタムディレクティブの登録

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

使用:

方法1

'./message.js' からメッセージをインポートします。
設定(){
  メッセージ({ テキスト: 'ログインに失敗しました'、タイプ: 'エラー' })
}

方法2

// セットアップ関数でコンポーネントインスタンスオブジェクトにアクセスします。import { getCurrentInstance } from 'vue'
   設定(){
     定数インスタンス = getCurrentInstance()
     instance.proxy.$message({ text: 'ログインに失敗しました', type: 'error' })
   } 

方法 3 this.$message

this.$message({ text: 'ログインに失敗しました', type: 'error' })

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue3 手動カプセル化ポップアップ ボックス コンポーネント メッセージ メソッド
  • Vue3 はメッセージコンポーネントの例を実装します
  • vue をベースにしたグローバルメッセージコンポーネントを作成する
  • Vue での el-message のカプセル化と使用

<<:  MySQLのパフォーマンスが突然低下する理由

>>:  MySQLクラスタのDockerデプロイメントの実装

推薦する

Vue h関数の使い方の詳しい説明

目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...

Dockerコンテナのログ処理の詳細な説明

Docker には多くのログ プラグインがあります。デフォルトでは json-file を使用します...

CSSスタイルの記述順序と命名規則と注意事項

書き順の重要性ブラウザのリフローを減らし、ブラウザのDOMレンダリングパフォーマンスを向上させる①:...

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...

MySQL における大規模オブジェクトのマルチバージョン同時実行制御の詳細な説明

MySQL 8.0: InnoDB のラージ オブジェクトに対する MVCCこの記事では、MySQL...

Ubuntu 20.04 LTSの詳細なインストール履歴

この記事では、USB ブート ディスクの作成とシステムのインストールについて説明します。システム構成...

Reactコンポーネントのライフサイクル機能についての簡単な説明

React コンポーネントのライフサイクル機能とは何ですか?ライフサイクル関数は、ES6 構文クラス...

VMware vCenter の不正な任意ファイルアップロードの脆弱性 (CVE-2021-21972) について

背景CVE-2021-21972 VMware vCenter における認証されていないコマンド実行...

CSS3で実装された6つの境界遷移効果

6つの効果実装コードhtml <h1>CSS 境界遷移</h1> <セ...

Docker Compose の実践とまとめ

Docker Compose は、Docker コンテナ クラスターのオーケストレーションを実現しま...

Vueは質問応答機能を実装する

1. リクエスト回答インターフェース2. ユーザーの回答が正しいかどうかを判断します。回答が正しい場...

DockerのTLS(SSL)証明書の有効期限の問題を解決する

問題現象: [root@localhost ~]# docker イメージをプル xxx.com.c...

node.js の require メソッドの読み込みルールの詳細な説明

require メソッドの読み込みルールキャッシュからの読み込みを優先するコアモジュールパス形式のモ...

AngularでTweenMaxアニメーションライブラリを使用する際の問題と解決策

最近何もすることがないのでCSSをいじっていますより良いアニメーションライブラリTweenMaxを見...

プロジェクトに必須の 8 つの JavaScript コード スニペット

目次1. ファイル拡張子を取得する2. コンテンツをクリップボードにコピーする3. スリープ時間は何...