vue构造器注册UI组件

 1 import ConfirmComponent from ‘../../components/confirm/index‘
 2 import { mergeOptions } from ‘../pluginHelper‘
 3
 4 function plugin (Vue) {
 5   if (plugin.install) {
 6     return
 7   }
 8   const Confirm = Vue.extend(ConfirmComponent)
 9   let $vm = new Confirm({
10     el: document.createElement(‘div‘)
11   })
12   document.body.appendChild($vm.$el)
13   const confirm = {
14     show (options) {
15       if ($vm.showValue) {
16         return
17       }
18       if (typeof options === ‘object‘) {
19         mergeOptions($vm, options)
20       }
21       if (options && (options.onShow || options.onHide)) {
22         this.watcher = $vm.$watch(‘showValue‘, (val) => {
23           val && options.onShow && options.onShow($vm)
24           if (val === false) {
25             if (options.onHide) {
26               options.onHide($vm)
27             }
28             this.watcher && this.watcher()
29           }
30         })
31       }
32       $vm.$off(‘on-cancel‘)
33       $vm.$off(‘on-confirm‘)
34       $vm.$on(‘on-cancel‘, () => {
35         options && options.onCancel && options.onCancel()
36       })
37       $vm.$on(‘on-confirm‘, () => {
38         options && options.onConfirm && options.onConfirm()
39       })
40       $vm.showValue = true
41     },
42     hide () {
43       $vm.showValue = false
44     }
45   }
46   if (!Vue.confirm) {
47     Vue.confirm = confirm
48   }
49   Vue.mixin({
50     created: function () {
51       this.$confirm = Vue.confirm
52     }
53   })
54 }
55
56 export default plugin

pluginHelper

 1 // merge
 2 export const mergeOptions = function ($vm, options) {
 3   const defaults = {}
 4   for (let i in $vm.$options.props) {
 5     defaults[i] = $vm.$options.props[i].default
 6   }
 7   const _options = Object.assign({}, defaults, options)
 8   for (let i in _options) {
 9     $vm[i] = _options[i]
10   }
11 }
12
13 export const initializeProps = function ($vm) {
14   for (let i in $vm.$options.props) {
15     $vm[i] = $vm.$options.props[i].default
16   }
17 }

loading

 1 <template>
 2   <div>
 3     <transition name="transition">
 4       <div class="loading" v-show="show">
 5         <div class="toast">
 6           <i class="icon"></i>
 7           <p class="text" v-if="text">{{text}}</p>
 8         </div>
 9       </div>
10     </transition>
11   </div>
12 </template>
13
14 <script>
15   export default {
16     name: ‘loading‘,
17     props: {
18       show: Boolean,
19       text: String
20     }
21   }
22 </script>
23
24 <style lang="scss" scoped>
25   .loading {
26     position: fixed;
27     z-index: 1000;
28     top: 0;
29     right: 0;
30     left: 0;
31     bottom: 0;
32
33     .toast {
34       position: fixed;
35       z-index: 5000;
36       width: 92px;
37       min-height: 92px;
38       top: 180px;
39       left: 50%;
40       margin-left: -46px;
41       background: rgba(17, 17, 17, 0.7);
42       text-align: center;
43       border-radius: 5px;
44       color: #FFFFFF;
45     }
46
47     .icon {
48       margin: 27px 0 0;
49       width: 38px;
50       height: 38px;
51       display: inline-block;
52       vertical-align: middle;
53       -webkit-animation: loading 1s steps(12, end) infinite;
54       animation: loading 1s steps(12, end) infinite;
55       background: transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;
56       background-size: 100%;
57     }
58
59     .text {
60       display: block;
61       margin: 2px 0 15px;
62       font-size: 12px;
63     }
64   }
65
66   // 转
67   @-webkit-keyframes loading {
68     0% {
69       transform: rotate3d(0, 0, 1, 0deg);
70     }
71
72     100% {
73       transform: rotate3d(0, 0, 1, 360deg);
74     }
75   }
76
77   @keyframes loading {
78     0% {
79       transform: rotate3d(0, 0, 1, 0deg);
80     }
81
82     100% {
83       transform: rotate3d(0, 0, 1, 360deg);
84     }
85   }
86
87   // 延时动画
88   .transition-enter, .transition-leave-active {
89     opacity: 0;
90   }
91
92   .transition-leave-active, .transition-enter-active {
93     transition: opacity 300ms;
94   }
95 </style>

pluginLoadind

 1 import LoadingComponent from ‘../../components/loading/index‘
 2
 3 function plugin (Vue) {
 4   if (plugin.install) {
 5     return
 6   }
 7   const Loading = Vue.extend(LoadingComponent)
 8   let $vm = new Loading({
 9     el: document.createElement(‘div‘)
10   })
11   document.body.appendChild($vm.$el)
12   const loading = {
13     show (options) {
14       if ($vm.show) {
15         return
16       }
17       $vm.text = $vm.$options.props.text.default
18       if (typeof options === ‘string‘) {
19         $vm.text = options
20       }
21       $vm.show = true
22     },
23     hide () {
24       $vm.show = false
25     },
26     isVisible () {
27       return $vm.show
28     }
29   }
30   if (!Vue.loading) {
31     Vue.loading = loading
32   }
33   Vue.mixin({
34     created: function () {
35       this.$loading = Vue.loading
36     }
37   })
38 }
39
40 export default plugin

Vue.use() 挂载

原文地址:https://www.cnblogs.com/QQPrincekin/p/11541253.html

时间: 2024-07-30 10:42:14

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

Vue.js之UI组件elementUI——MintUI

目的: 为了提高开发效率 功能 原则: 拿过来直接使用 vue-cli  ->  vue-loader bower 前端包管理器 jquery#1.11.1 自动解决依赖npm node包管理器 [email protected] 饿了么团队开源一个基于vue 组件库 elementUI: 如何使用 官网:http://element.eleme.io/使用:1. 安装 element-ui npm i element-ui -D npm install element-ui --save-de

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

今天有一个idea,vue一些组件,可能会全局都用到,我觉得在main.js写 Vue.component(name, instance) 然后很命令式,写着也不好看,想着能够有一个函数可以指定加载比如components下的文件,自动完成全局化注册,想起来就很帅 放代码: export function autoLoadingGlobalComponent() { const requireComponent = require.context( // 其组件目录的相对路径 '../compo

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

1.上啦加载下拉刷新的使用 this.$refs.loadmore.onTopLoaded(); this.$refs.loadmore.onBottomLoaded(); 上啦刷新下拉加载的 动画显示 在没有数据的请求前想看见的话 setTimeout(() => { this.$refs.loadmore.onTopLoaded(); }, 1000); jq的思路: 默认加载第一页,然后下拉的时候在请求数据在加载. 在这里: 函数 loadTop (): loadBottom () 会被默

造个自己的Vue的UI组件库类似Element

前言 随着前端的三大框架的出现,组件化的思想越来越流行,出现许多组件库.它能够帮助开发者节省时间提高效率, 如React的Ant-design,Vue的iView,Element等,它们的功能已经很完善了. 我写这遍文章的目的:记录自己搭建UI库的过程(对Vue的理解加深了好多)演示地址首先讲一下思路: 平常写组件时,写一个组件要用时直接导入就行了,如你写了一个time.vue,用的时候 import time from '路径' 现在要写一个组件库,是不是把所有组件一个文件夹里(如button

介绍推荐优秀的Vue UI组件库

Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正式使用.开发团队在使用Vue.js框架和UI组件库以后,开发效率大大提高,自己写的代码也少了,很多界面效果组件已经封装好了.在选择Vue UI组件库的过程中,通过GitHub上根据star数量.文档丰富程度.更新的频率以及维护等因素,也收集整理了一些优秀的Vue UI组件库. 下载资源:www.yi

【转】优秀的Vue UI组件库

原文来源:https://www.leixuesong.com/3342 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正式使用.开发团队在使用Vue.js框架和UI组件库以后,开发效率大大提高,自己写的代码也少了,很多界面效果组件已经封装好了.在选择Vue UI组件库的过程中,通过GitHub上根据star数量.文档丰富程度.更新的频率以及维护

Vue.js——60分钟组件快速入门

一.组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素. 本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星!(所有示例都放在GitHub Pages上了,请访问https://github.com/keepfool/vue-t

Vue.js——60分钟组件快速入门(下篇)

概述 上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子组件中定义props,可以让父组件的数据传递下来,这就好比子组件告诉父组件:"嘿,老哥,我开通了一个驿站,你把东西放到驿站我就可以拿到了." 今天我们将着重介绍slot和父子组件之间的访问和通信,slot是一个非常有用的东西,它相当于一个内容插槽,它是我们重用组件的基础.Vue的事件系统独立于原生的DOM事件,它用于组件之间的通信. 本文的主要内容如下: 组件的编译作用域 在组件templ

Vue.js&mdash;&mdash;60分钟组件快速入门(下篇)

概述 上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子组件中定义props,可以让父组件的数据传递下来,这就好比子组件告诉父组件:"嘿,老哥,我开通了一个驿站,你把东西放到驿站我就可以拿到了." 今天我们将着重介绍slot和父子组件之间的访问和通信,slot是一个非常有用的东西,它相当于一个内容插槽,它是我们重用组件的基础.Vue的事件系统独立于原生的DOM事件,它用于组件之间的通信. 本文的主要内容如下: 组件的编译作用域 在组件templ