摘要:如果我們的項目中沒有用到任何框架的話,為了更好的用戶體驗,肯定會用到和。那么我們就自定義這兩個組件吧。組件首先,在下新建文件夾,存放我們的和兩個文件當然文件的具體位置你可以自行安排。最后,只需在要用的地方
如果我們的Vue項目中沒有用到任何UI框架的話,為了更好的用戶體驗,肯定會用到loading和toast。那么我們就自定義這兩個組件吧。
1、Toast組件
首先,在common下新建global文件夾,存放我們的toast.vue和toast.js兩個文件(當然文件的具體位置你可以自行安排)。
(1). toast.vue
{content}
(2). toast.js
import Vue from "Vue" import ToastComponent from "./Toast.vue" const Toast = {} let showToast = false // 存儲loading顯示狀態 let toastNode = null // 存儲loading節點元素 const ToastConstructor = Vue.extend(ToastComponent) Toast.install = function (Vue, options) { // 參數 var opt = { duration: "1200" } for (var property in options) { opt[property] = options[property] } Vue.prototype.$toast = function (tips, type) { if (type === "hide") { toastNode.isShowToast = showToast = false } else { if (showToast) { // 如果toast還在,則不再執行 return } toastNode = new ToastConstructor({ data: { isShowToast: showToast, content: tips } }) toastNode.$mount() // 掛在實例,為了獲取下面的toastNode.$el document.body.appendChild(toastNode.$el) toastNode.isShowToast = showToast = true setTimeout(function () { toastNode.isShowToast = showToast = false }, opt.duration) } }; ["show", "hide"].forEach(function (type) { Vue.prototype.$toast[type] = function (tips) { return Vue.prototype.$toast(tips, type) } }) } export default Toast
然后,我們需要把寫好的組件在/src/main.js中引用一下。
import Toast from "./components/common/global/toast" Vue.use(Toast)
最后,怎么使用呢?只需在要用的地方this.$toast.show("hello world")
2、Loading組件
loading組件只需要照著toast組件搬過來,稍微改下就可以了。
首先,在common下新建global文件夾,存放我們的loading.vue和loading.js兩個文件。
(1). loading.vue
{content}
(2). loading.js
import Vue from "Vue" import LoadingComponent from "./Loading.vue" const Loading = {} let showLoading = false // 存儲loading顯示狀態 let loadingNode = null // 存儲loading節點元素 const LoadingConstructor = Vue.extend(LoadingComponent) Loading.install = function (Vue) { Vue.prototype.$loading = function (tips, type) { if (type === "hide") { loadingNode.isShowLoading = showLoading = false } else { if (showLoading) { // 如果loading還在,則不再執行 return } loadingNode = new LoadingConstructor({ data: { isShowLoading: showLoading, content: tips } }) loadingNode.$mount() // 掛在實例,為了獲取下面的loadingNode.$el document.body.appendChild(loadingNode.$el) loadingNode.isShowLoading = showLoading = true } }; ["show", "hide"].forEach(function (type) { Vue.prototype.$loading[type] = function (tips) { return Vue.prototype.$loading(tips, type) } }) } export default Loading
然后,在/src/main.js中引用一下loading組件。
import Loading from "./components/common/global/loading" Vue.use(Loading)
最后,只需在要用的地方this.$loading.show("hello world")、 this.$loading.hide()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103617.html
摘要:一簡單的使用主要用于需要動態渲染的組件,或者類似于提示組件注意創建的是一個組件構造器,而不是一個具體的組件實例屬于的全局,在實際業務開發中我們很少使用,因為相比常用的寫法使用步驟要更加繁瑣一些。 最近在重構公司的項目,有些組件想要封裝的更靈活,例如toast、loading、messageBox等彈窗組件,模仿了mint-ui封裝此類組件的方式封裝了自己的彈窗組件; mint-UI的t...
摘要:記錄一些小技巧和踩過的坑由于本篇文章內容太多,導致編輯器有點卡,所以新開辟了一篇實踐二,后續再這里更新。組件的生命周期函數是在標簽里的數據發生變化時候觸發數據可能更新了,但是沒有綁定到上面的話,不會調用鉤子函數。 記錄一些小技巧和踩過的坑 由于本篇文章內容太多,導致SF編輯器有點卡,所以新開辟了一篇 vue2實踐(二),后續再這里更新。 1. props 帶不帶冒號的區別 ...
摘要:下面也是以模塊的模塊集為例,可以發現和路由有一些不同就是這里為了防止模塊跟全局耦合,運用函數式編程思想類似于依賴注入,將全局的實例作為函數參數傳入,再返回出一個包含的對象,這個導出的對象將會被以模塊名命名,合并到全局的集中。 前言 web前端發展到現代,已經不再是嚴格意義上的后端MVC的V層,它越來越向類似客戶端開發的方向發展,已獨立擁有了自己的MVVM設計模型。前后端的分離也使前端人...
摘要:下面也是以模塊的模塊集為例,可以發現和路由有一些不同就是這里為了防止模塊跟全局耦合,運用函數式編程思想類似于依賴注入,將全局的實例作為函數參數傳入,再返回出一個包含的對象,這個導出的對象將會被以模塊名命名,合并到全局的集中。 前言 web前端發展到現代,已經不再是嚴格意義上的后端MVC的V層,它越來越向類似客戶端開發的方向發展,已獨立擁有了自己的MVVM設計模型。前后端的分離也使前端人...
摘要:去年年底自己搭了一個在移動端的開發框架,感覺體驗不是很好。路由懶加載首頁終于寫完了,以上這些就是我在移動端體驗優化的實戰。去年年底自己搭了一個vue在移動端的開發框架,感覺體驗不是很好。上個星期又要做移動端的項目了。所以我花了兩天時間對之前的那個開發框架做了以下優化 自定義vuex-plugins-loading 路由切換動畫 + keep alive 動態管理緩存組件 better-sc...
閱讀 1211·2023-04-25 20:31
閱讀 3718·2021-10-14 09:42
閱讀 1485·2021-09-22 16:06
閱讀 2636·2021-09-10 10:50
閱讀 3524·2021-09-07 10:19
閱讀 1772·2019-08-30 15:53
閱讀 1170·2019-08-29 15:13
閱讀 2818·2019-08-29 13:20