自定义指令 防止多次触发

export default {
    install(Vue) {
      // 防止重复点击
      Vue.directive("preventReClick", {
        inserted(el, binding) {
          // console.log("binding-7", binding);
          el.addEventListener("click", () => {
            if (!el.disabled) {
              el.disabled = true;
              setTimeout(() => {
                el.disabled = false;
              }, binding.value || 1000);
            }
          });
        },
      });
    },
  };

并在 main.js 注册

import preventReClick from "./utils/preventReClick"

Vue.use(preventReClick)

在标签上使用   

 <el-button  type="text"  v-preventReClick="3000" >下载</el-button >

### 如何在 UniApp 中创建自定义指令 UniApp 基于 Vue.js 构建,因此支持 Vue 的大部分特性,包括自定义指令。这使得开发者可以在 UniApp 应用程序中利用自定义指令来增强 DOM 元素的行为。 #### 定义全局自定义指令 为了在整个应用程序范围内使用自定义指令,在 `main.js` 文件中可以通过 `Vue.directive()` 方法注册全局指令: ```javascript // main.js import Vue from 'vue'; import App from './App'; Vue.config.productionTip = false; // 注册一个全局自定义指令 v-focus Vue.directive('focus', { inserted(el) { // 当被绑定的元素插入到 DOM 中时…… el.focus(); // 调用原生 focus() 方法使元素获得焦点 } }); App.mpType = 'app'; const app = new Vue({ ...App }); app.$mount(); ``` 此代码片段展示了如何创建名为 `v-focus` 的全局自定义指令[^3]。当页面加载完成或者动态组件渲染完毕之后,带有该属性的输入框会自动获取光标位置。 #### 局部自定义指令 如果只需要在一个单独的组件内部使用某个特定的自定义指令,则可以直接在这个组件选项对象里声明局部指令: ```javascript export default { name: 'MyComponent', directives: { capitalize: { bind(el, binding) { el.textContent = el.textContent.toUpperCase(); }, update(el, binding) { if (binding.value) { el.textContent = binding.value.toUpperCase(); } else { el.textContent = ''; } } } }, data() { return {}; } }; ``` 上述例子中的 `capitalize` 指令会在每次更新视图的时候把目标节点的内容转换成大写字母显示出来[^4]。 #### 使用钩子函数控制生命周期 除了简单的初始化逻辑外,还可以借助多个生命周期钩子更精细地控制自定义指令的行为模式。这些钩子涵盖了从挂载前后的各个阶段直到卸载整个过程的同时间点上的处理需求。 | 钩子名称 | 描述 | | --- | --- | | **bind** | 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性初始化设置。| | **inserted** | 被绑定元素插入父节点时(仅保证父节点存在即可),这个钩子会被触发。此时可执行一些依赖于真实DOM的操作。| | **update** | 所在组件 VNode 更新但是可能发生在其子VNodes全部更新之前。注意:初次渲染触发此钩子。| | **componentUpdated** | 组件及其子组件都已完成更新后才会被执行。适合用来响应数据变化并同步调整样式或其他状态。| | **unbind** | 只调用一次,当只绑定了当前指令的元素解除绑定或移除时调用。| 通过合理运用以上提到的各种技术手段,能够极大提升开发效率的同时也赋予应用更加丰富的交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值