Не путай
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 - вверх события.