首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vue 3迁移: INSTANCE_EVENT_EMITTER compat已被禁用

Vue 3迁移: INSTANCE_EVENT_EMITTER compat已被禁用
EN

Stack Overflow用户
提问于 2022-10-10 13:03:14
回答 1查看 62关注 0票数 1

我已经将我的项目从Vue 2迁移到Vue 3。现在,我在运行时在控制台中得到了以下错误:

代码语言:javascript
运行
复制
INSTANCE_EVENT_EMITTER compat has been disabled.
    assertCompatEnabled vue.runtime.esm-bundler.js:2539
    on vue.runtime.esm-bundler.js:2585
    created mixin-sorting.js:185
    callWithErrorHandling vue.runtime.esm-bundler.js:1668
    callWithAsyncErrorHandling vue.runtime.esm-bundler.js:1677
    callWithAsyncErrorHandling vue.runtime.esm-bundler.js:1687
    callHook...

我还配置了Eventbus:

代码语言:javascript
运行
复制
// eventBus.js
import emitter from 'tiny-emitter/instance'

export default {
    $on: (...args) => emitter.on(...args),
    $once: (...args) => emitter.once(...args),
    $off: (...args) => emitter.off(...args),
    $emit: (...args) => emitter.emit(...args)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-21 18:51:22

迁移指南中提供的Eventbus配置是发射器对象,您应该在任何想使用该api的地方导入它:

代码语言:javascript
运行
复制
<script>
  import emitter from './CustomEmitter.js';

  export default {
    mounted () {
      emitter.$emit('mounted');
    }
  }
</script>

或者,您也可以在您的main.js中使用该配置作为混音。

代码语言:javascript
运行
复制
import { createApp } from 'vue';
import App from './App.vue';
import emitter from './CustomEmitter.js';

const app = createApp(App);
app.mixins(emitter);
app.mount('#app');

然后,您可以这样在组件中调用发射器API:

代码语言:javascript
运行
复制
<script>
  export default {
    mounted () {
      this.$options.$emit('mounted');
    }
  }
</script>

如您所见,您的所有方法都存储在$options对象中。

如果您想保留老式的Vue 2 API,应该将其包装在methods对象中,如下所示:

代码语言:javascript
运行
复制
export default {
  methods: {
    $on: (...args) => emitter.on(...args),
    $once: (...args) => emitter.once(...args),
    $off: (...args) => emitter.off(...args),
    // but you really want to use custom name for $emit, to avoid 
    // overriding native $emit function, used for component events
    $customEmit: (...args) => emitter.emit(...args)
  }
};

然后,您可以在组件中使用它,如下所示:

代码语言:javascript
运行
复制
<script>
  export default {
    mounted () {
      this.$customEmit('mounted');
    }
  }
</script>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74015414

复制
相关文章

相似问题

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