监听来自动态vue组件的事件

2024-05-21

您将如何侦听动态创建的组件实例发出的事件?

在示例中,顶部组件添加到 DOM 中,而第二个组件是在 javascript 中动态创建的。

Vue.component("button-counter", {
  data: function() {
    return {
      count: this.initial_count
    }
  },
  props: ['initial_count'],
  methods: {
    add: function() {
      this.count++
        this.$emit('myevent', this.count)
    }
  },
  template: '<button v-on:click="add">You clicked me {{ count }} times.</button>'
})

let app = new Vue({
  el: "#app",
  data() {
    return {
      initial_count: 10,
    }
  },
  mounted: function() {
    let initial_count = this.initial_count

    let ButtonCounterComponentClass = Vue.extend({
      data: function() {
        return {}
      },
      render(h) {
        return h("button-counter", {
          props: {
            initial_count: initial_count
          }
        })
      }
    })
    let button_counter_instance = new ButtonCounterComponentClass()
    button_counter_instance.$mount()
    button_counter_instance.$on('myevent', function(count) {
      console.log('listened!')
      this.say(count)
    })
    this.$refs.container.appendChild(button_counter_instance.$el)
  },
  methods: {
    say: function(message) {
      alert(message)
    }
  }
})
<script src="https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/dist/vue.js"></script>

<div id="app">
    <button-counter initial_count=20 v-on:myevent="say"></button-counter>
    <div ref='container'></div>
</div>

如果我明白你想要什么,那么你只需要监听内部组件上的事件并将其传递。

我在几个地方使用了箭头函数来避免出现问题this绑定。否则,我会尽力让您的代码保持不变。更改标记为****.

Vue.component("button-counter", {
  data: function() {
    return {
      count: this.initial_count
    }
  },
  props: ['initial_count'],
  methods: {
    add: function() {
      this.count++
        this.$emit('myevent', this.count)
    }
  },
  template: '<button v-on:click="add">You clicked me {{ count }} times.</button>'
})

let app = new Vue({
  el: "#app",
  data() {
    return {
      initial_count: 10,
    }
  },
  mounted: function() {
    let initial_count = this.initial_count

    let ButtonCounterComponentClass = Vue.extend({
      data: function() {
        return {}
      },
      render(h) {
        return h("button-counter", {
          props: {
            initial_count: initial_count
          },
          // **** Added this ****
          on: {
            myevent: count => {
              this.$emit('myevent', count);
            }
          }
          // ****
        })
      }
    })
    let button_counter_instance = new ButtonCounterComponentClass()
    button_counter_instance.$mount()
    // **** Changed the next line ****
    button_counter_instance.$on('myevent', count => {
      console.log('listened!')
      this.say(count)
    })
    this.$refs.container.appendChild(button_counter_instance.$el)
  },
  methods: {
    say: function(message) {
      alert(message)
    }
  }
})
<script src="https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/dist/vue.js"></script>

<div id="app">
    <button-counter initial_count=20 v-on:myevent="say"></button-counter>
    <div ref='container'></div>
</div>

重要的是要明白这一点button_counter_instance不是你的实例button-counter成分。您已将其包装在另一个组件中,尽管该组件没有添加任何额外的 DOM 节点。因此,监听包装器组件与监听不同button-counter.

您可以传递给哪些内容的文档h: https://v2.vuejs.org/v2/guide/render-function.html#The-Data-Object-In-Depth https://v2.vuejs.org/v2/guide/render-function.html#The-Data-Object-In-Depth

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

监听来自动态vue组件的事件 的相关文章

随机推荐

  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • 如何解析cURL返回的header?

    我正在尝试使用 cURL 与 API 进行通信 其中一种方法要求我传递ININ ICWS CSRF Token标题 即WAhtYWxoYXlla1dBY2NvUkRJWCQxZmUxZWFhZS0xZTE0LTQyNGYtYjdhZS0zN
  • Ios Swift制作字体切换粗体、斜体、boldItalic、正常而不改变其他属性

    我很惊讶 在 Swift 中简单地为现有字体设置粗体和斜体是如此复杂 我只是想通过在字体类上使用以下方法来简化事情 我希望将以下方法添加到已设置字体系列和字体大小的现有字体中 我需要保留这些并仅更改以下内容 setBold Shud 保留斜
  • 如何强制 pm2 在特定时间后重新启动?

    我在用PM2让我的 Node js 应用程序保持运行 有什么办法可以拥有PM2每 1 小时重新启动一次我的应用程序 将下面的代码放入pm2 js并开始它pm2 start pm2 js var pm2 require pm2 pm2 con
  • 共享辅助轴

    如何使用 matplotlib 中的子图设置共享辅助轴 这是显示问题的最少代码 import numpy as np import matplotlib as mpl import matplotlib pyplot as plt def
  • 如何将包含大量表格的 HTML 文档转换为 Word 文档?

    我创建了一个包含许多表格的 HTML 文档 如何将文档转换为Word 问题是 如果我用 Word 打开 HTML 文档 由于某种原因我会得到非标准的双行表格 table border 1 color 000000 cellpadding 0
  • 由于缺少 PHP 扩展,CakePHP 3 无法连接到数据库

    我正在尝试使用 WT NMP 安装 cakePHP 3 0 0 但收到以下消息 CakePHP 无法连接到数据库 由于以下原因无法使用数据库驱动程序 Cake Database Driver Mysql 缺少 PHP 扩展或未满足的依赖项
  • 如何让 Vim 突出显示非 ascii 字符?

    我试图让 Vim 突出显示非 ASCII 字符 是否有可用的设置 正则表达式搜索模式或插件来执行此操作 在 a 中使用范围 搜索中的字符类 您应该能够excludeASCII 十六进制字符范围 因此突出显示 假设您有hlsearch启用 所
  • 依赖解析算法

    我正在编写一个包管理器 为此我希望依赖项解析尽可能强大 每个包都有一个版本列表 每个版本包含以下信息 具有可比性的 ID 依赖关系 软件包列表以及每个软件包的一组可接受的版本 冲突 软件包列表以及每个软件包的一组与该版本一起导致问题的版本
  • 查看寻呼机 - 使用静态变量以编程方式滑动到下一页

    我想在我的 ViewPager 中以编程方式制作幻灯片 我的问题是 滑动事件是由放置在 ViewPager 保存的片段内部的按钮调用的 我知道代码 viewpager setCurrentItem int index 现在我的想法是使 Vi
  • 将用户定义的表类型从 VBA 传递到 SQL

    我的任务是创建一个 Excel 电子表格作为 SQL 数据库的前端 以及一些对数据执行复杂计算的 C 我的老板想要前端作为电子表格 而计算对于 VBA 来说似乎太复杂了 目前 检索数据集的存储过程运行良好 然后 用户将在 Excel 中编辑
  • Lua中有状态迭代器和无状态迭代器的区别

    Lua中无状态和有状态迭代器有什么区别 请详细解释一下 什么时候需要使用无状态 什么时候需要使用另一种 我需要例子来理解这个概念 首先让我们就一个定义达成一致 在 Lua 中 迭代器是function 类似对象 每次调用时都会返回序列中的下
  • ListView 中的错误:InvalidArgument = 值“0”对于“index”无效

    当我第二次选择 ListView 中的某个项目时 会出现此错误 我尝试调试它 当我第二次选择某个项目时 list answers SelectedItems Count是0 为什么呢 这是我的代码 private void list ans
  • 如何使用 jquery ajax 将锚点的值发送到 php

    我正在尝试使用 jquery 将几个锚点的值发送到 php 文件 但我没有从 php 脚本中得到回调 div class result div a href value class star Star 5 a a href value cl
  • 模板函数静态变量

    我有一个模板函数可以根据typename传递给它 就像这样 template
  • 理解基本递归

    public static void main String args System out println factorial 5 public int factorial int n if n lt 1 return 1 else re
  • 如何使用 php imap 将邮件消息移动到文件夹

    我似乎无法将邮件移至已保存的文件夹 这是我的代码 mbox imap open mail server mail port mail folder mail username mail password or die Error openi
  • 函数式 Scala 中的选择排序

    我正在学习 Scala 编程 并编写了选择排序算法的快速实现 然而 由于我对函数式编程还不太了解 所以在转换为更 Scala 风格时遇到了困难 对于 Scala 程序员来说 如何使用 Lists 和 vals 来做到这一点 而不是回到我的命
  • 重定向而不是 404 错误页面 - 状态代码不起作用 (Nginx)

    我目前正在迁移到 nginx 服务器 我尝试将其放入名为的 404 ErrorDocument 中404 php 如果我现在尝试访问http mydomain com 404 php 这按预期工作 它将我重定向到 Google 但是一旦我尝
  • 监听来自动态vue组件的事件

    您将如何侦听动态创建的组件实例发出的事件 在示例中 顶部组件添加到 DOM 中 而第二个组件是在 javascript 中动态创建的 Vue component button counter data function return cou