import ConfirmComponent from '../../components/confirm/index'
import { mergeOptions } from '../pluginHelper' function plugin (Vue) {
if (plugin.install) {
return
}
const Confirm = Vue.extend(ConfirmComponent)
let $vm = new Confirm({
el: document.createElement('div')
})
document.body.appendChild($vm.$el)
const confirm = {
show (options) {
if ($vm.showValue) {
return
}
if (typeof options === 'object') {
mergeOptions($vm, options)
}
if (options && (options.onShow || options.onHide)) {
this.watcher = $vm.$watch('showValue', (val) => {
val && options.onShow && options.onShow($vm)
if (val === false) {
if (options.onHide) {
options.onHide($vm)
}
this.watcher && this.watcher()
}
})
}
$vm.$off('on-cancel')
$vm.$off('on-confirm')
$vm.$on('on-cancel', () => {
options && options.onCancel && options.onCancel()
})
$vm.$on('on-confirm', () => {
options && options.onConfirm && options.onConfirm()
})
$vm.showValue = true
},
hide () {
$vm.showValue = false
}
}
if (!Vue.confirm) {
Vue.confirm = confirm
}
Vue.mixin({
created: function () {
this.$confirm = Vue.confirm
}
})
} export default plugin

pluginHelper

 // merge
export const mergeOptions = function ($vm, options) {
const defaults = {}
for (let i in $vm.$options.props) {
defaults[i] = $vm.$options.props[i].default
}
const _options = Object.assign({}, defaults, options)
for (let i in _options) {
$vm[i] = _options[i]
}
} export const initializeProps = function ($vm) {
for (let i in $vm.$options.props) {
$vm[i] = $vm.$options.props[i].default
}
}

loading

 <template>
<div>
<transition name="transition">
<div class="loading" v-show="show">
<div class="toast">
<i class="icon"></i>
<p class="text" v-if="text">{{text}}</p>
</div>
</div>
</transition>
</div>
</template> <script>
export default {
name: 'loading',
props: {
show: Boolean,
text: String
}
}
</script> <style lang="scss" scoped>
.loading {
position: fixed;
z-index: 1000;
top: 0;
right: 0;
left: 0;
bottom: 0; .toast {
position: fixed;
z-index: 5000;
width: 92px;
min-height: 92px;
top: 180px;
left: 50%;
margin-left: -46px;
background: rgba(17, 17, 17, 0.7);
text-align: center;
border-radius: 5px;
color: #FFFFFF;
} .icon {
margin: 27px 0 0;
width: 38px;
height: 38px;
display: inline-block;
vertical-align: middle;
-webkit-animation: loading 1s steps(12, end) infinite;
animation: loading 1s steps(12, end) infinite;
background: transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;
background-size: 100%;
} .text {
display: block;
margin: 2px 0 15px;
font-size: 12px;
}
} // 转
@-webkit-keyframes loading {
0% {
transform: rotate3d(0, 0, 1, 0deg);
} 100% {
transform: rotate3d(0, 0, 1, 360deg);
}
} @keyframes loading {
0% {
transform: rotate3d(0, 0, 1, 0deg);
} 100% {
transform: rotate3d(0, 0, 1, 360deg);
}
} // 延时动画
.transition-enter, .transition-leave-active {
opacity: 0;
} .transition-leave-active, .transition-enter-active {
transition: opacity 300ms;
}
</style>

pluginLoadind

 import LoadingComponent from '../../components/loading/index'

 function plugin (Vue) {
if (plugin.install) {
return
}
const Loading = Vue.extend(LoadingComponent)
let $vm = new Loading({
el: document.createElement('div')
})
document.body.appendChild($vm.$el)
const loading = {
show (options) {
if ($vm.show) {
return
}
$vm.text = $vm.$options.props.text.default
if (typeof options === 'string') {
$vm.text = options
}
$vm.show = true
},
hide () {
$vm.show = false
},
isVisible () {
return $vm.show
}
}
if (!Vue.loading) {
Vue.loading = loading
}
Vue.mixin({
created: function () {
this.$loading = Vue.loading
}
})
} export default plugin

Vue.use() 挂载

vue构造器注册UI组件的更多相关文章

  1. 整理目前支持 Vue 3 的 UI 组件库 (2021 年)

    最近,让前端圈子振奋的消息莫过于 Vue 3.0 的发布,一个无论是性能还是 API 设计都有了重大升级的新版本.距离 Vue 3.0 正式版发布已经有一段时间了,相信相关生态周边库也正在适配新版本中 ...

  2. vue 自动注册全局组件

    vue 自动注册全局组件 vue 注册全局组件的方式 const plugins = { install(Vue) { const requireComponent = require.context ...

  3. vue.js相关UI组件收集

    内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 ###UI组件 element ★9689 - 饿了么出品的Vue2的web UI工具套件 Vux ★6927 - 基于Vu ...

  4. Vue动态注册异步组件(非同一个工程的组件)

    前言:最近在掘金逛的时候,无意中看到前滴滴前端架构黄轶大佬,看到了大佬分享的一篇博客滴滴 webapp 5.0 Vue 2.0 重构经验分享 ,对于其中第5个问题(异步加载的业务线组件,如何动态注册? ...

  5. 基于Vue的前端UI组件库的比对和选型

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 由于录制视频的需要,要做前端UI组件库的选型.平时国内外也见了不少基于Vue的UI ...

  6. vue 中注册全局组件

    1  全局注册组件 建一个 js 文件, 注册全局组件, 并且暴露出去 然后再在 main.js  中引入       在页面就可以直接使用了    2 全局注册过滤器 建立文件, 包含所有过滤器方法 ...

  7. Vue自动化注册全局组件脚本

    今天有一个idea,vue一些组件,可能会全局都用到,我觉得在main.js写 Vue.component(name, instance) 然后很命令式,写着也不好看,想着能够有一个函数可以指定加载比 ...

  8. Vue 批量注册局部组件及应用

    博客地址:https://ainyi.com/105 批量注册路由的有个博客说到:https://ainyi.com/77 实际工作中,可能会遇到一个大页面里面有很多个模块,这些模块一般是需要拆分到单 ...

  9. vue移动端Ui组件 mint-ui 使用指南

    1.上啦加载下拉刷新的使用 this.$refs.loadmore.onTopLoaded(); this.$refs.loadmore.onBottomLoaded(); 上啦刷新下拉加载的 动画显 ...

随机推荐

  1. Linux查看当前目录下所有文件中包含map的行记录

    find yaochi_e.prm |xargs grep -ri "map" grep -n "map" *.prm|grep -v "\-\-ma ...

  2. Python基础入门一文通 | Python2 与Python3及VSCode下载和安装、PyCharm激活与安装、Python在线IDE、Python视频教程

    目录 1. 关键词 2. 推荐阅读 2.1. 视频教程 3. 本文按 4. 安装 4.1. 视频教程 4.2. 资源下载 4.3. 安装教程 1. 关键词 Python2 与Python3及VSCod ...

  3. 学Python的第六天

    今天发愤图强,死学Python!!!! 为此小编还买了自己喜欢的McPython! 从小老师就说兴趣是最好的老师,所以呢买这本书是想通过我的世界这款游戏来提高自己的学习兴趣!!! 当然也有私心啦... ...

  4. CentOS 6.3下Zabbix监控MySQL数据库参数

    系统环境:CentOS 6.3 x64  http://www.linuxidc.com/Linux/2012-12/76583.htm mysql:    mysql-5.6.10 http://w ...

  5. MAN PVCREATE

    PVCREATE(8)                                                        PVCREATE(8) NAME/名称       pvcreat ...

  6. C++数组读入MATLAB数据

    data = rand(8, 10); fid = fopen('File.data', 'w'); if fid == - 1 error('Cannot open file for writing ...

  7. 向Hive中导入数据的方式

    一.Hive客户端:根据数据源不同划分 1.从本地文件系统中导入数据到hive表中: load data local inpath "path" [OVERWRITE] into ...

  8. USACO 2006 November Gold Corn Fields

    USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...

  9. activity_main.xml 添加自己画的view 组件

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  10. Jsoup学习和使用

    我们先看一下百度百科简介 它是java的HTML解析器 用HttpClient获取到网页后 具体的网页提取需要的信息的时候 ,就用到Jsoup,Jsoup可以使用强大的类似选择器,来获取需要的数据. ...