<div id="content" v-on:hide="alert('ff')" >
Во-первых - обработчик вешать надо на экземпляр popover'а. Во-вторых, дайте-ка угадаю - в компоненте метода alert у вас нет, вы ждёте, что выполнится window.alert. Нет, так не будет. Делайте отдельный метод и вызывайте его там:
<el-popover
@hide="onHide"
...
methods: {
onHide() {
alert('HIDE');
},
...
UPD. Вынесено из комментариев:
Метод alert есть
в root событие v-on:hide не ловится
Понятно. Варианты тут такие:
- Пробрасывать событие наверх по всей иерархии. Подписались на событие на popover'е, кинули такое же (или не совсем, имя лучше бы другое сочинить, а то в отрыве от своего источника выглядит слишком общим, непонятно, что это такое) -
@hide="$emit('hide')"
; подписались на событие в родителе, снова emit; ну и т.д., до корневого компонента (если что, в нём делать emit уже не надо, вместо него будет ваш alert).
- Спускать вниз обработчик. В корне, на экземпляре компонента, внутри которого находится popover, подписываетесь на событие:
@hide="alert"
. На всех уровнях ниже, включая popover, тоже, только обработчик берёте уже не из методов, а из того, что сверху передано - @hide="$listeners.hide"
(или v-on="$listeners"
, если надо передавать вниз всё, или кроме hide больше ничего нет).
- Можно воспользоваться ссылкой на корень.
В компоненте, где создаётся экземпляр popover'а:
<el-popover
@hide="$root.$emit('popover-hide')"
...
В корне:
mounted() {
this.$on('popover-hide', this.alert);
...
- Шина событий:
Vue.prototype.$eventBus = new Vue;
. Этот способ самый гибкий - слушать события можно где угодно откуда угодно.
Действуете аналогично предыдущему варианту, только emit/on вызываете у шины, а не корня:
<el-popover
@hide="$eventBus.$emit('popover-hide')"
...
mounted() {
this.$eventBus.$on('popover-hide', this.alert);
...