グローバルトーストコンポーネントをカプセル化するVueの完全な例

グローバルトーストコンポーネントをカプセル化するVueの完全な例

序文

最近Vueを体験しました。Toastはフロントエンドでよく使われるコンポーネントです。この記事ではVueがグローバルトーストコンポーネントをカプセル化するプロセスを詳しく紹介します。詳しい紹介を見ていきましょう。

1. vue-cliを使う

1. Toastコンポーネントを定義する

// コンポーネント/トースト

<テンプレート>
  <トランジション名="フェード">
    <div v-show="visible">{{メッセージ}}</div>
  </トランジション>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  データ () {
    戻る {
      表示: 偽、
      メッセージ: ''
    }
  }
}
</スクリプト>

<スタイルスコープ>
div {
  位置: 固定;
  上位: 30%
  左: 50%;
  パディング: 5px 20px;
  色: #fff;
  背景色: #424242;
  境界線の半径: 5px;
  テキスト配置: 中央;
  変換: translate(-50%, -50%);
}
/* Vue アニメーション遷移効果設定 */
.フェード-エンター-アクティブ、
.フェードアウトアクティブ{
  遷移: 不透明度 .5 秒;
}
.fade-enter、.fade-leave-to {
  不透明度: 0;
}
</スタイル>

2. main.jsで設定する

'vue' から Vue をインポートします
'./App.vue' からアプリをインポートします。
'./components/Toast' から Toast をインポートします。

// プラグインオブジェクトを定義する const ToastObj = {
  インストール: 関数 (Vue) {
    // Vue の「サブクラス」コンポーネントを作成する const ToastConstructor = Vue.extend(Toast)
    // このサブクラスのインスタンスを作成し、要素にアタッチします const instance = new ToastConstructor()
    console.log(インスタンス)
    // このインスタンスを動的に作成された要素にマウントし、要素をグローバル構造インスタンスに追加します。$mount(document.createElement('div'))
    document.body.appendChild(インスタンス.$el)

    // コンポーネントを制御するために、Vue のプロトタイプ チェーンにメソッドを登録します。Vue.prototype.$toast = (msg,duration = 1500) => {
      インスタンス.メッセージ = メッセージ
      インスタンス.visible = true
      タイムアウトを設定する(() => {
        インスタンス.visible = false
      }、 間隔)
    }
  }
}
Vue.use(ToastObj)

Vue.config.productionTip = false

新しいVue({
  レンダリング: h => h(App),
}).$mount('#app')

3. 他のコンポーネントでの使用

<テンプレート>
  <div class="hello">
    <h1>{{ メッセージ }}</h1>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 'HelloWorld',
  データ: () => {
    戻る {
      メッセージ: 'HelloWord'
    }
  },
  マウントされた(){
  	//トースト コンポーネントを使用します。this.$toast('コンポーネントが正常にマウントされました')
  }
}
</スクリプト>

2. vue-cliなし

vue-cli の助けを借りれば、コンポーネントのインポートとエクスポートは簡単ですが、ビルド ツールの助けがなければ、他の方法が必要になります。

1. トーストコンポーネントを登録する

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
  <メタ文字セット="UTF-8">
  <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
  <title>ドキュメント</title>
  <script src="./static/vue/vue.min.js"></script>
</head>
<本文>
  <div id="アプリ">
    <私のボタン></私のボタン>
  </div>
  <div id="トースト"></div>
  <スクリプト>
    // トーストのグローバルコンポーネントを定義する const Toast = Vue.component('toast', {
      データ() {
        戻る {
          isShow: false、
          メッセージ: 'グローバルプロンプト'、
          ラッパースタイル: {
            位置: '固定'、
            上: '20%'、
            左: '50%'、
            zインデックス: 10000,
            パディング: '6px 12px',
            背景色: '#424242',
            境界線の半径: '5px',
            変換: 'translate(-50%, -50%)'
          },
          テキストスタイル: {
            色: '#fff',
            フォントサイズ: '14px'
          }
        }
      },
      テンプレート: `<div v-show="isShow" :style="wrapperStyle">
                  <span :style="textStyle">{{ メッセージ }}</span>
                </div>`
    })

2. トーストプラグインを登録する

// プラグインオブジェクトを定義する const ToastObj = {
  インストール: 関数 (Vue) {
    // トーストコンポーネントインスタンスを作成し、要素にアタッチします。const instance = new Toast()
    //このインスタンスをDOMインスタンスにマウントします。$mount('#toast')

    // コンポーネントを制御するために、Vue のプロトタイプ チェーンにメソッドを登録します。Vue.prototype.$toast = ({message,duration = 2000} = {}) => {
      インスタンス.メッセージ = メッセージ
      インスタンス.isShow = true

      タイムアウトを設定する(() => {
        インスタンス.isShow = false
      }、 間隔)
    }
  }
}
//トーストプラグインを登録する Vue.use(ToastObj)

3. 他のコンポーネントでの使用

    Vue.component('my-button', {
      データ() {
        戻る {
          ラッパースタイル: {
            幅: '70px'、
            パディング: '20px',
            背景色: '緑'
          },
          テキストスタイル: {
            色: '#fff',
            フォントサイズ: '16px'
          }
        }
      },
      メソッド: {
        ハンドルクリック() {
          this.$トースト({
            メッセージ: 「クリックしました」
          })
        }
      },
      テンプレート: `<div :style="wrapperStyle" @click="handleClick">
                  <span :style="textStyle">プロンプトをクリック</span>
                </div>`
    })

    定数vm = 新しいVue({
      el: '#app'
    })
  </スクリプト>
</本文>
</html>

要約する

これで、グローバル トースト コンポーネントの Vue カプセル化に関するこの記事は終了です。グローバル トースト コンポーネントの Vue カプセル化に関するより関連性の高い記事については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueでカプセル化されたコンポーネントはグローバルに登録され参照されます

<<:  Alibaba Cloudのセキュリティルール設定の詳細な説明

>>:  PythonはデータベースMySQLの解凍バージョンのインストール構成に接続し、問題が発生しました

推薦する

MySQL ロックの知識ポイントのまとめ

ロックの概念①. 現実世界では、鍵は外の世界から身を隠したいときに使う道具です。 ②. コンピュータ...

Antdesign-vueとsortablejsを組み合わせて、2つのテーブルをドラッグして並べ替える機能を実現

目次成果を達成するsortablejs の紹介具体的な実装成果を達成する最初は、antdesign ...

Vueのトグルボタンをクリックしてボタンを有効にし、無効にします。

実装方法は3つのステップに分かれています。テンプレートに 2 つのボタンを設定し、v-if と v-...

JavaScriptのアロー関数の特徴と通常の関数との違い

目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...

擬似分散グラフィックを実現するための VMware 構成 Hadoop チュートリアル

1. 実験環境シリアルナンバープロジェクトソフトウェアとバージョン1オペレーティング·システムCen...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

シンプルなドラッグ効果を実現するJavaScript

この記事では、簡単なドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Windows CVE-2019-0708 リモート デスクトップ コード実行脆弱性の再現問題

1. 脆弱性の説明マイクロソフトは2019年5月15日、CVE番号CVE-2019-0708のWin...

MySQL インデックスの長さ制限の原理の分析

この記事は主に、MySQL インデックスの長さ制限の原理の分析を紹介します。サンプル コードを通じて...

MySQL におけるユニーク制約と NULL の詳細な説明

序文説明を簡略化するために以前に設定した要件は、他のグループから MQ メッセージを受信し、データベ...

仮想マシンクローン Linux centos6.5 システム ネットワーク カード構成グラフィック チュートリアル

Linux システムに触れたばかりの初心者として、VMware 仮想マシンに CentOS6.5 シ...

さまざまなネットワーク画像形式におけるPNGの利点の詳細な説明

BMP は、ハードウェア デバイスに依存せず、広く使用されている画像ファイル形式です。ビットマップ保...

JSベースの手持ち連射機能+テキスト揺れ特殊効果コードの簡単実装

少し前にTikTokで揺れる連打が流行っていたので真似してみることにしました。さっそく効果をみてみま...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...