Задать вопрос
alaskafx
@alaskafx
Не .do Frontend

Пытаюсь передать действие по клику, но оно вызывается компонентом, в котором передавал?

Хочу передать в компонент действие, которое будет происходить по клику на него, но когда я передаю это самое действие- тот компонент, в котором я передавал другому начинает сам вызывать это действие.

В моём случае - это $router.push('/auth')
<MainButton :clickMethod=" $router.push('/auth')" >Создать аккаунт</MainButton>


Почему так происходит и как это исправить?
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
Aetae
@Aetae Куратор тега Vue.js
Тлен
Не путай v-on:\@ и v-bind:\: - это разные вещи и они работают по-разному.
v-bind на вход получает выражение, т.е. по сути чистый js, и исполняет его, при:
:clickMethod=" $router.push('/auth')" в свойство clickMethod прилетит результат вызова $router.push('/auth').

При v-on на компонент вешается слушатель событий, т.е , при:
<MainButton @clickMethod=" $router.push('/auth')" условно(на самом деле там внутренняя система) происходит следующее:
MainButton.addEventListener('clickMethod', ($event) => {
    this.$router.push('/auth')
})


Чтобы передать в clickMethod коллбэк, ты должен собственно передать туда заранее заданный в компоненте метод:
<MainButton :clickMethod="clickMethod"
methods: {
  clickMethod() {
    this.$router.push('/auth')
  }
}
Но так делать ни в коем случае не надо. Так пишут в React и это очень криво. Надо использовать именно v-on:\@ и $emit, как посоветовал Alex_mos . Это гораздо более удобно и контролируемо. Ну и в принципе это vue-way: вниз props - вверх события.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы