我已经将我的项目从Vue 2迁移到Vue 3。现在,我在运行时在控制台中得到了以下错误:
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:
// 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)
}
发布于 2022-11-21 18:51:22
迁移指南中提供的Eventbus配置是发射器对象,您应该在任何想使用该api的地方导入它:
<script>
import emitter from './CustomEmitter.js';
export default {
mounted () {
emitter.$emit('mounted');
}
}
</script>
或者,您也可以在您的main.js
中使用该配置作为混音。
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:
<script>
export default {
mounted () {
this.$options.$emit('mounted');
}
}
</script>
如您所见,您的所有方法都存储在$options
对象中。
如果您想保留老式的Vue 2 API,应该将其包装在methods
对象中,如下所示:
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)
}
};
然后,您可以在组件中使用它,如下所示:
<script>
export default {
mounted () {
this.$customEmit('mounted');
}
}
</script>
https://stackoverflow.com/questions/74015414
复制相似问题