当前位置: 首页 > 知识库问答 >
问题:

vue.js - vue 2 自定义指令根据权限判断是否阻止事件执行?不生效?

苏涵润
2024-09-10
// 注册自定义指令
Vue.directive('permission', {
  bind(el, binding, vnode) {
    const { value } = binding; // value 是权限检查函数
    const eventType = binding.arg || 'click';
    
    // 事件处理函数
    const eventHandler = (event) => {
      if (!value()) { // 调用权限检查函数
        event.stopImmediatePropagation(); // 阻止事件的进一步传播
        // 如果需要,可以在这里显示提示信息
        console.log('Access denied');
      }
    };

    // 绑定事件处理函数
    el.addEventListener(eventType, eventHandler);

    // 存储事件处理函数以便于以后移除
    el.__vueEventHandler__ = eventHandler;
  },
  unbind(el, binding) {
    const eventType = binding.arg || 'click';
    if (el.__vueEventHandler__) {
      el.removeEventListener(eventType, el.__vueEventHandler__);
      delete el.__vueEventHandler__;
    }
  }
});

在组件中使用 <div v-cclick:click="false" @click="aaaaaa">5555555555</div>

aaaaaa 还是会调用这里 console.log('Access denied')也打印了,但是aaaaaa还是会执行,应该怎么改呢?

共有1个答案

亢雅懿
2024-09-10

Event.stopPropagation 阻止捕获和冒泡阶段中当前事件的进一步传播

Event.stopImmediatePropagation 阻止监听同一事件的其他事件监听器被调用

事件监听器按被添加的顺序被调用,例如:当添加监听器 A, B, C, D,他们将被依次执行。如果你在 B 中调用 stopImmediatePropagation,那么它将阻止 C 和 D 的调用。

 类似资料:
  • 主要内容:实例,实例,钩子,实例,实例除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点: 实例 <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> // 注册一个全局自定义指令 v-focus Vue.d

  • vue的自定义事件完成后才执行下面的console.log吗,还是怎么执行 请告知!

  • 主要内容:实例,实例,自定义组件的 v-model,实例,实例父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,就需要使用自定义事件! 我们可以使用 v-on 绑定自定义事件, 每个 Vue 实例都实现了事件接口(Events interface),即: 使用 监听事件 使用 触发事件 另外,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。 以下实例中子组件已经和它外部完全解耦了。它所做的只是触发一个父组件关心的

  • 从文档中: 特定于Microsoft 当使用 /volatile: ms编译器选项时——默认情况下,当目标是ARM以外的架构时——编译器会生成额外的代码来维护对易失性对象的引用之间的排序,以及维护对其他全局对象的引用的排序。特别是: 对易失性对象的写入(也称为易失性写入)具有发布语义学;也就是说,对全局或静态对象 的引用发生在指令 序列中对易失性对象的写入之前,将发生在编译的 二进制文件中的易失性

  • 本文向大家介绍nginx try_files指令判断文件是否存在实例,包括了nginx try_files指令判断文件是否存在实例的使用技巧和注意事项,需要的朋友参考一下 现在有这样一个需求,网站根目录下有静态文件,static目录下也有静态文件,static目录下的静态文件是程序批量生成的,我想让nginx在地址不变的前提下优先使用static目录里面的文件,如果不存在再使用根目录下的静态文件,

  • vue2做自定义按钮权限,请问前端接口请求还没执行完(还未获取到权限点),自定义指令就已执行,这个问题怎么解决? 目前用了延时器