vue 2 @ обработчик щелчков работает не так, как ожидалось

#vue.js #vuejs2 #vue-component

#vue.js #vuejs2 #vue-компонент

Вопрос:

У меня есть компонент «card» со многими «лицами».
Щелкните карточку, и она покажет другое лицо.

 <template lang="pug">
  .infini-card(@click.prevent="clickCard")
    infini-card-empty(v-if="face==='empty'")
    infini-card-secret(v-if="face==='secret'" v-bind="cardData")
    infini-card-reveal(v-if="face==='reveal'" v-bind="cardData")
</template>
  

У div «.infini-card» есть обработчик щелчков, и я могу сделать switch () там для обработки изменений для всех разных типов граней. Прохладный.

Но первое, что я попробовал, не сработало:

 <template lang="pug">
  .infini-card
    infini-card-empty(v-if="face==='empty'")
    infini-card-secret(v-if="face==='secret'" v-bind="cardData" @click.prevent="clickSecret")
    infini-card-reveal(v-if="face==='reveal'" v-bind="cardData")
</template>
  

Метод clickSecret() никогда не вызывается на лице v-if’d. Этот компонент создается в другом шаблоне pug, подобном этому: infini-card(v-bind.sync="cardA")

Почему? 🙂

Заранее спасибо!

Ответ №1:

Обратите внимание, что @click работает по-разному для собственных элементов и компонентов vue.

В собственном компоненте ( <div>, <button> ) @click прослушивается событие щелчка.

В пользовательском компоненте ( <infini-card-secret> ) @click прослушивается событие, вызывающее «щелчок» из этого пользовательского компонента ( this.$emit('click') )

  • Чтобы убедиться, что @click прослушивается собственное событие щелчка в пользовательских компонентах, используйте .native модификатор, подобный этому:
  • @click.native="clickSecret" .

Документы Vue: привязка собственных событий к компонентам