停止接收来自被破坏的子组件的事件

2024-04-24

我有一个父级,我可以在其中动态添加子组件。

当在挂载中添加子组件时,我为事件注册一个侦听器

EventBus.$on('content-type-saving', function() {
    logic here...
}

问题是,当通过从子组件数组中删除该组件而在父组件中删除该组件时,该组件仍然会触发并且其内部的代码会运行。

我怎样才能防止这种情况发生?我试过这个

    beforeDestroy() {
      //do something before destroying vue instance
        EventBus.$off('content-type-saving')
    }

但这也关闭了所有其他子组件的该事件,因此那些仍然存在的子组件将不再执行逻辑操作,因为我关闭了被破坏的子组件中的事件。

我认为如果我关闭一个事件,它只会影响该子组件的该事件的侦听,而不会打开所有子组件的事件。

如何阻止被破坏的组件对事件做出反应?


你打电话时$off仅包含活动名称,all听众被删除 https://v2.vuejs.org/v2/api/#vm-off对于指定的事件。

相反,您只想删除正在侦听的组件的事件。你的组件应该看起来像这样:

const component = {
  methods:{
    listener(){
      //do something on event
    }
  },
  created(){
    EventBus.$on('content-type-saving', this.listener)
  },
  beforeDestroy(){
    EventBus.$off('content-type-saving', this.listener)
  }
}

这将仅删除当前组件的特定侦听器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

停止接收来自被破坏的子组件的事件 的相关文章

  • Nuxt - 操作文档 bodyattrs 类中的类属性

    我一直在寻找一个好的解决方案来动态修改可以附加到 bodyAttrs 的类 但没有成功 我没有找到专门解决 回答我的情况的帖子 我希望有人能帮帮忙 我正在开发一个项目 在该项目中我使用具有 SSR 功能的 Nuxt 该站点具有可以通过用户配
  • vue.js keyup, keydown 事件落后一个字符

    我正在使用 keydown keyup 事件 它调用一个 javascript 函数 该函数将输入框的值打印到控制台 以及事件的 currentTarget 字段的值 并且我注意到它晚了一个字符 例如 如果我输入hello进入输入框 我只看
  • 我在 firebase.auth.ApplicationVerifier 中遇到问题

    错误发生在signInWithPhoneNumber 的第二个参数中 我无法解决这个问题 我使用了三种方法来发送 otp 验证 otp 和最后用于验证码 methods sendOTP e e preventDefault if this
  • Vue Chart.js - 数据变化时图表不更新

    我正在使用 Vue js 和 Chart js 绘制一些图表 每次我调用该函数时generateChart 图表不会自动更新 当我在 Vue Devtools 中检查数据时 它们是正确的 但图表没有反映数据 但是 当我调整窗口大小时 图表确
  • vue中有自动更新这段代码的东西吗?

    我在导航器中找到了这个按钮 当用户登录时会显示该按钮 而当用户注销时该按钮就会消失 但现在我需要在按钮删除 出现之前刷新页面 这是我的代码 Button div div class div div
  • Webpack 不包括 ProvidePlugins

    我正在开发一个小型试用 Web 应用程序 它使用 vue webpack 模板 https github com vuejs templates webpack https github com vuejs templates webpac
  • 使用Vue组件渲染函数时无限循环

    我正在使用 Vue 组件来渲染一些表头 如下所示 render createElement return createElement div class header Array apply null length this initHou
  • 仅当内容超过两行时显示只读/隐藏按钮

    我正在创建一个评论部分 类似于 youtube 的东西 并且我希望能够在 content 有多行时显示阅读更多 隐藏按钮 这就是我到目前为止所做的 我的阅读更多 隐藏按钮可以工作 因为我添加了一个计算的线夹 使内容仅在存在多行时才显示两行
  • 当路由器处于历史模式时,PWA 不会加载(基于 Vue CLI 3 的项目)

    我有一个基于 Vue CLI 3 的应用程序 我想将其用作 PWA 我需要它在历史模式下工作 因为哈希会介入我正在执行的基于 OAuth 的身份验证过程的一部分的重定向 当路由处于哈希模式时 可以像 PWA 一样正常加载 一旦我将模式更改为
  • Laravel 5.2 CORS,GET 不适用于预检选项

    可怕的 CORS 错误 跨源请求被阻止 同源策略不允许读取 远程资源位于http localhost mysite api test http localhost mysite api test 原因 CORS 标头 Access Cont
  • 无法安装组件:模板或渲染函数未定义。组件导入失败

    我正在尝试复制 vue 教程示例 在这里找到 https v3 vuejs org guide component basics html passing data to child components with props https
  • Vue 3:“defineProps”引用本地声明的变量

    为什么我收到警告错误消息 defineProps引用本地声明的变量 eslint vue valid define props 当我在 props 中使用自定义验证器时SFC
  • 未捕获的类型错误:emit 不是 vue3 中的函数

    当我在 vue 3 设置代码块中编写此代码以获取输入值时 请遵循此answer https stackoverflow com questions 66737918 how to use v model on component in vu
  • vue.js:观察输入并未在每次按键时触发

    我有一个input正在监视其模型属性 问题是每次按键时不会调用 watch 方法铬 安卓设备 如果我点击输入文本 就会调用它 过去确实有效 但我不知道发生了什么 在Chrome 桌面版可以正常使用 那就是watch for text每次按键
  • 类型错误:无法读取未定义的属性“getters”

    我正在尝试测试一个引用 Vuex 商店的基本 Vue 组件 我以为我遵循了 Vue 的例子 https vue test utils vuejs org guides using with vuex html mocking getters
  • 如何将vue文件样式提取到一个单独的style.css文件中

    我正在使用 vue loader 默认情况下 对于每个 vue 文件 您的视图中都有一个样式标签 这不是一件好事 根据 vue loader 文档我可以做到这一点 https vue loader vuejs org en configur
  • vuejs2复制剪贴板问题

    我正在尝试使用https alligator io vuejs vue clipboard copy https alligator io vuejs vue clipboard copy 对于 Vue js 中的复制剪贴板功能 它对于字符
  • 在 iframe/对象标签内运行时更新初始路由器 url

    我目前正在容器 主 Vue 应用程序的对象标签 iframe 也可以工作 内渲染 Vue 应用程序 首先 我设置一个文件服务器 为该容器或请求的子应用程序提供服务 以在 div 内呈现 为了简单起见 我将仅显示 Node Express 服
  • 在其他设备上无法通过IP地址访问Vue项目 vue cli 3 npm

    我有一个使用 vue cli 3 创建的项目 当我运行命令 npm runserve 时 它会给出以下成功消息 我用假 替换了我的IP地址 App running at Local http localhost 8080 Network h
  • Vuejs 在模板中添加多行?

    我想知道在构建 Vuejs 模板时如何最好地安排新行 我的代码不起作用 因为它破坏了 JavaScript 容器 Vue js 希望我将整个 html 放在一行中 当我计划添加页脚内容时 这有点不切实际 Vue component foot

随机推荐