Vuejs в чем разница между v-on: event и this. $ on (событие, обработчик)?

Я изучаю Vuejs event handling.
Я думаю, что разработчик мог бы использовать this.$on('event', handler) в файле js для обработки 'event'.

Есть пример.

<div id="mainapp" v-on:event="processEventFromView">
    <button type="button" v-on:click="emitEvent">
       Emit Event
    </button>
</div>

js файл

var app = new Vue({
  el:"#mainapp",
  data:{
    show:false
  },
  created:function(){
     this.$on('event', this.processEvent);
  },
  methods:{
      emitEvent:function(){
          this.$emit('event', {data:'mydata'});
      },
      processEvent(data){
         console.log('js', data);  //this is fired when clicking the button.
      },
      processEventFromView(data){
         console.log('view', data);  //this is not fired whenever.
      }      

   }
})

Но в этом примере при нажатии на кнопку запускается только обработчик processEvent, прикрепленный с помощью this.$on(). В чем разница между v-on и this.$on?
Почему v-on:event="processEventFromView" не вызывается всякий раз?
Могу ли я прикрепить event handler к событию click кнопки со ссылкой ref вместо v-on:click="emitEvent"?
Помогите, пожалуйста, в чем я ошибаюсь.

Я думаю (пока не могу это доказать), что генерируемое событие Vue проходит только по иерархии компонентов, а не по DOM.

Phil 26.10.2018 04:55

Для некоторой точки зрения вы можете обратиться к Эта проблема.

Husam Ibrahim 26.10.2018 05:08
6
2
842
1

Ответы 1

Я предполагаю, что это связано и на него ответил Линус Берг из Vue здесь https://stackoverflow.com/a/36159698/1225266 Хотя это связано с более ранней версией Vue (сообщение от 2016 года), я думаю, что это все еще применимо.

Короче ответ на ваш вопрос

Why is v-on:event="processEventFromView" not called whenever?

это (цитирую)

cannnot use v-on:custom-event-name in the template (that's only to be used on components).

@ tony19 Вы пробовали использовать событие обычай, когда вы генерируете событие с помощью this. $ emit, как в OP, тогда это не работает. (@click - это «стандартное событие dom»).

softbear 27.10.2018 10:21

@ tony19 по-прежнему вы используете v-on: custom в теге компонента (который должен работать, как указано Линусом Бергом), а не в шаблоне компонента, который генерирует событие.

softbear 28.10.2018 14:20

Другие вопросы по теме