首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何监听vue js中“root”发出的事件?

问如何监听vue js中“root”发出的事件?
EN

Stack Overflow用户
提问于 2020-10-30 02:48:40
回答 1查看 1K关注 0票数 0

我的应用程序使用vue.js,并与vanilla js进行了一些集成。在我的vanilla js文件中,我创建了一个新的vue实例并从中发出一个名为annotation-click的事件。我可以在dev tools选项卡中看到此事件。

下面是我制作的一个自定义事件类:

customevent.js

代码语言:javascript
复制
import Vue from 'vue'
export default window.Event = class Event {
  constructor () {
    this.vue = new Vue()
  }

  fire (event, data = null) {
    this.vue.$emit(event, data)
  }

  listen (event, callback) {
    this.vue.$on(event, callback)
  }
}

在我的普通js文件中,我像这样发出事件:

代码语言:javascript
复制
import Event from '../utils/customevent'

var test = new Event()
...
handleClick: (view, pos, event) => {
const { schema } = view.state
const attrs = getMarkAttrs(view.state, schema.marks.annotation)
    if (attrs.href && event.target instanceof HTMLSpanElement) {
        test.fire('notification', {
        title: "annotation-joe"
        })
    }
},
...

该事件是从我的主vue.js应用程序发出的,如下所示:

​

​

我正在监听vue.js组件中的事件,但我的监听器似乎没有选择该事件。

如何正确监听<Root>发出的事件

和我的vue.js应用程序,它导入了我监听的npm包,如下所示:

代码语言:javascript
复制
<script>
import Event from "mypackage/utils/customevent";
var test = new Event();
...
  created() {
    test.listen("notification", function(msg) {
      console.log(msg);
    });
  }
EN

回答 1

Stack Overflow用户

发布于 2020-10-30 06:46:27

我写了一个例子来实现它:

​

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        {{message}}
    </div>
    <button onclick="test()">test</button>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
 
        class MyClass extends EventTarget {
            doSomething() {
                this.dispatchEvent(new Event('something'));
            }
        }
        document.getRootNode().instance = new MyClass()

        function test() {
            const root = document.getRootNode()
            root.instance.doSomething();
        }
   
        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello Vue!'
            },
            created() {
                const root = document.getRootNode()
                root.instance.addEventListener('something', (e) => {
                    console.log('Instance fired "something".', e);
                });

            },
        })
    </script>
</body>

</html>

​

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64597440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档