vue2.0 全局挂载自定义指令和组件

一、在src>components下新建index.js

 二、在这个 index.js 里引入组件及自定义指令

// 引入自定义分页组件
import paging from "@/components/common/paging.vue";

export default {
    // 全局挂载
  install(Vue) {
    //   挂载为全局组件
    Vue.component("paging", paging);
    // 自定义拖拽指令
    Vue.directive('drag', {
      inserted:function(el){
        // 设置样式
        el.style.position = 'absolute';
        el.style['-webkit-user-select'] = 'none';
        el.style['-ms-user-select'] = 'none';
        el.style['-moz-user-select'] = '-moz-none';
        el.style.cursor = 'pointer';
        // 事件监听
        el.onmousedown=function(e){
            let l=e.clientX-el.offsetLeft;
            let t=e.clientY-el.offsetTop;
            document.onmousemove=function(e){
                el.style.left=e.clientX-l+'px';
                el.style.top=e.clientY-t+'px';
            };
            el.onmouseup=function(){
                document.onmousemove=null;
                el.onmouseup=null;
            }
        }
      }
    });
    // 自定义节流按钮指令
    Vue.directive('pre4',{
			inserted(button,bind){
                // 事件监听
				button.addEventListener('click',()=>{
					if(!button.disabled){
						button.disabled = true;
						setTimeout(()=>{
							button.disabled = false
						},1000)
					}
				})
			}
		});

  }
};

三、在 main.js 里安装这个插件

1、导入

import plugin from "@/components/index.js";  // 自定义插件

2、安装(要放在new Vue() 之前)

Vue.use(plugin)

main.js 代码:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

import plugin from "@/components/index.js"; // 自定义插件

Vue.config.productionTip = false;

Vue.use(plugin) // 安装插件


new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

四、开始使用

<paging></paging

<div v-drag></div>

<button v-pre4></button>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 2.0 项目,可以通过自定义全局弹框来实现对话框、提示框等弹框的统一管理。实现方式如下: 1. 创建一个 Vue 组件作为全局弹框的模板,包含弹框的 HTML 结构和样式,以及控制弹框显示隐藏的逻辑。 2. 在 main.js 创建一个 Vue 实例,作为全局事件总线,用于在组件间通信。 3. 在该 Vue 实例注册一个自定义指令,用于在组件调用弹框。 4. 在组件使用自定义指令,触发全局事件,传递弹框的参数给全局事件总线。 5. 在全局事件总线的相应方法,根据传递的参数控制弹框的显示隐藏。 示例代码如下: 1. 弹框组件模板 ``` <template> <div v-show="visible" class="dialog"> <slot></slot> </div> </template> <script> export default { data() { return { visible: false }; }, methods: { show() { this.visible = true; }, hide() { this.visible = false; } } }; </script> <style> .dialog { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); z-index: 9999; } </style> ``` 2. 全局事件总线 ``` import Vue from 'vue'; export const eventBus = new Vue(); ``` 3. 自定义指令 ``` import { eventBus } from './eventBus'; Vue.directive('dialog', { bind(el, binding) { el.addEventListener('click', () => { eventBus.$emit('showDialog', binding.value); }); } }); ``` 4. 组件调用弹框 ``` <template> <button v-dialog="{ title: 'Hello', content: 'World' }">Show Dialog</button> </template> ``` 5. 全局事件总线控制弹框的显示隐藏 ``` import Dialog from './Dialog.vue'; import { eventBus } from './eventBus'; new Vue({ render: h => h(App), created() { eventBus.$on('showDialog', ({ title, content }) => { const dialog = new Vue({ render: h => h(Dialog, { props: { title, content } }) }).$mount(); document.body.appendChild(dialog.$el); dialog.$children[0].show(); }); } }).$mount('#app'); ``` 这样就实现了一个简单的全局弹框组件,可以在项目任意组件间使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值