使用 vuejs 显示带有事件的 flash 消息
display a flash message with events with vuejs
我正在尝试执行源代码中 here 的操作,但它不起作用。
但是事件已发送但从未收到。
这是我能做的最简单的例子:
在bootstrap.js中:
window.events = new Vue();
window.flash = function (message, level = 'success') {
console.log('emit'); // This is working
window.events.$emit('flash', { message, level });
};
Vue.component('flash', require('./vue/components/Flash.vue'));
Flash.vue:
<template>
<div> MY FLASH</div>
</template>
<script>
export default {
created() {
window.events.$on(
'flash', data => alert('event!!!')
);
},
};
</script>
在我看来:
<flash></flash>
我可以在我的视图中看到组件渲染,即我的 FLASH 消息,但我从未收到来自 emit 的警报!
我调试也没有报错
我错过了什么吗?看起来很简单....
您问题中的代码设置了一个名为 flash
的全局函数来触发事件。必须在某处调用该函数才能触发事件。
这里是a codesandbox演示。除了触发事件之外的所有内容都来自您的代码。
请注意,只有在创建 Flash 组件之后调用了 flash
方法时才会显示警报。
此外,请记住在组件销毁时使用总线删除监听器,以防止在多次创建组件时添加多个监听器。
这是一个老问题,但我遇到了同样的情况,我的解决方案可能不是最好的,但对我有用。
基于 Bert 的 "Note that the alert will only show if the flash method is called after the Flash component is created." 回复。
flash 组件可能有一些用例,如果你想在同一个 view/page 中使用它会很好,因为组件已安装但仍未触发任何事件。但是,如果您想使用 vue 路由器在 view/page 转换中使用,则需要使用 vuex 来存储您的警报消息,然后获取并显示警报。
我正在尝试执行源代码中 here 的操作,但它不起作用。
但是事件已发送但从未收到。
这是我能做的最简单的例子:
在bootstrap.js中:
window.events = new Vue();
window.flash = function (message, level = 'success') {
console.log('emit'); // This is working
window.events.$emit('flash', { message, level });
};
Vue.component('flash', require('./vue/components/Flash.vue'));
Flash.vue:
<template>
<div> MY FLASH</div>
</template>
<script>
export default {
created() {
window.events.$on(
'flash', data => alert('event!!!')
);
},
};
</script>
在我看来:
<flash></flash>
我可以在我的视图中看到组件渲染,即我的 FLASH 消息,但我从未收到来自 emit 的警报!
我调试也没有报错
我错过了什么吗?看起来很简单....
您问题中的代码设置了一个名为 flash
的全局函数来触发事件。必须在某处调用该函数才能触发事件。
这里是a codesandbox演示。除了触发事件之外的所有内容都来自您的代码。
请注意,只有在创建 Flash 组件之后调用了 flash
方法时才会显示警报。
此外,请记住在组件销毁时使用总线删除监听器,以防止在多次创建组件时添加多个监听器。
这是一个老问题,但我遇到了同样的情况,我的解决方案可能不是最好的,但对我有用。
基于 Bert 的 "Note that the alert will only show if the flash method is called after the Flash component is created." 回复。
flash 组件可能有一些用例,如果你想在同一个 view/page 中使用它会很好,因为组件已安装但仍未触发任何事件。但是,如果您想使用 vue 路由器在 view/page 转换中使用,则需要使用 vuex 来存储您的警报消息,然后获取并显示警报。