您好,登錄后才能下訂單哦!
本篇內容主要講解“Vue如何封裝全局toast組件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Vue如何封裝全局toast組件”吧!
// components/Toast <template> <transition name="fade"> <div v-show="visible">{{message}}</div> </transition> </template> <script> export default { data () { return { visible: false, message: "" } } } </script> <style scoped> div { position: fixed; top: 30%; left: 50%; padding: 5px 20px; color: #fff; background-color: #424242; border-radius: 5px; text-align: center; transform: translate(-50%, -50%); } /* vue動畫過渡效果設置 */ .fade-enter-active, .fade-leave-active { transition: opacity .5s; } .fade-enter, .fade-leave-to { opacity: 0; } </style>
import Vue from "vue" import App from "./App.vue" import Toast from "./components/Toast" // 定義插件對象 const ToastObj = { install: function (Vue) { // 創建一個Vue的“子類”組件 const ToastConstructor = Vue.extend(Toast) // 創建一個該子類的實例,并掛載到一個元素上 const instance = new ToastConstructor() console.log(instance) // 將這個實例掛載到動態創建的元素上,并將元素添加到全局結構中 instance.$mount(document.createElement("div")) document.body.appendChild(instance.$el) // 在Vue的原型鏈上注冊方法,控制組件 Vue.prototype.$toast = (msg, duration = 1500) => { instance.message = msg instance.visible = true setTimeout(() => { instance.visible = false }, duration) } } } Vue.use(ToastObj) Vue.config.productionTip = false new Vue({ render: h => h(App), }).$mount("#app")
<template> <div> <h1>{{ msg }}</h1> </div> </template> <script> export default { name: "HelloWorld", data: () => { return { msg: "HelloWord" } }, mounted () { // 使用 toast 組件 this.$toast("組件掛載成功") } } </script>
在借助 vue-cli 的情況下,可以方便實現組件的導入導出,但是在不借助構建工具的情況下,就需要使用其他方法了
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./static/vue/vue.min.js"></script> </head> <body> <div id="app"> <my-button></my-button> </div> <div id="toast"></div> <script> // 定義 toast 全局組件 const Toast = Vue.component("toast", { data() { return { isShow: false, message: "全局提示", wrapperStyle: { position: "fixed", top: "20%", left: "50%", zIndex: 10000, padding: "6px 12px", backgroundColor: "#424242", borderRadius: "5px", transform: "translate(-50%, -50%)" }, textStyle: { color: "#fff", fontSize: "14px" } } }, template: `<div v-show="isShow" :style="wrapperStyle"> <span :style="textStyle">{{ message }}</span> </div>` })
// 定義插件對象 const ToastObj = { install: function (Vue) { // 創建一個 toast 組件實例,并掛載到一個元素上 const instance = new Toast() // 將這個實例掛載到DOM中 instance.$mount("#toast") // 在Vue的原型鏈上注冊方法,控制組件 Vue.prototype.$toast = ({message, duration = 2000} = {}) => { instance.message = message instance.isShow = true setTimeout(() => { instance.isShow = false }, duration) } } } // 注冊 toast 插件 Vue.use(ToastObj)
Vue.component("my-button", { data() { return { wrapperStyle: { width: "70px", padding: "20px", backgroundColor: "green" }, textStyle: { color: "#fff", fontSize: "16px" } } }, methods: { handleClick() { this.$toast({ message: "我點擊了" }) } }, template: `<div :style="wrapperStyle" @click="handleClick"> <span :style="textStyle">點擊提示</span> </div>` }) const vm = new Vue({ el: "#app" }) </script> </body> </html>
到此,相信大家對“Vue如何封裝全局toast組件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。