Что означает @input="$emit('input', $event)" в компоненте vue?

Я читаю код, который хочу обновить,

  <b-input :value="value" @input="$emit('input', $event)" ref="input" :maxlength="maxlength"/>

что означает @input="$emit('input', $event)"? Где и как я могу прослушать входное событие?

2 ответа

@input это сокращение для v-on:input который связывается с компонентом input событие. vm.$emit здесь задокументировано и здесь есть пример с похожим вариантом использования.

В вашем случае ваш компонент просто генерирует событие с тем же именем и теми же аргументами, что и тот, который он получает от своего дочернего элемента. b-input, Программно вы можете слушать эти события с vm.$on например, в вашем mounted метод:

export default {
  components: { BInput },

  mounted () {
    this.$on('input', (event) => {
      console.log(event);
    });
  }
}

$emit - это данные, передаваемые другому компоненту, это пример.

  Component: getEmit.vue
    <template>
      <!--get data-->
      <button-emit v-on:data="getValue"></button-emit>
    </template>
    <script>
      import buttonEmit from './buttonEmit'
      export default {
        name: 'getEmit',
        components: { buttonEmit },
        methods: {
          // get payload in parameter
          getValue(event){
            alert('Get Emit Success' + event)
          }
        }
      }
    </script>

    Component: buttonEmit.vue
    <template>
      <button @click="emit($event)"></button>
    </template>
    <script>
      export default {
        name: 'buttonEmit',
        methods: {
          emit(event) {
    // Emit text data the payload event
            this.$emit('data', event)
          }
        }
      }
    </script>
Другие вопросы по тегам