Вы можете сделать что-то подобное, используя v-on
:
<v-icon v-for="icon in props.item.icons" v-on="getIconHandlers(icon)">{{icon}}</v-icon>
с:
getIconHandlers (icon) {
if (icon === 'thumb_up') {
return {click: this.thumbUpClickHandler}
}
return null
}
Вам, конечно, также нужно определить функцию thumbUpClickHandler
. Скорее всего, вы захотите передать некоторый контекст для текущей строки в обработчик кликов, чего можно достичь, передав эту дополнительную информацию в getIconHandlers
и записав ее в закрытии слушателя:
getIconHandlers (icon, otherStuff /* <- pass whatever you need */) {
if (icon === 'thumb_up') {
return {
click: () => {
this.thumbUpClickHandler(otherStuff)
}
}
}
return null
}
Вместо этого можно сделать все это встроенным в шаблоне, но я думаю, что легче понять, вытаскивая его в отдельный метод.
Используется синтаксис объекта, поддерживаемый v-on
, очень похожий на v-bind
. Это задокументировано в https://vuejs.org/v2/api/#v-on. Свойства этого объекта зарегистрированы как слушатели, используя ключи свойств в качестве имен событий и значения свойств в качестве соответствующих функций слушателей. Для других значков я просто возвращаю null
, хотя вы также можете вернуть пустой объект.
Vuetify покажет другой курсор мыши для значков, у которых есть click
прослушивателей, и при этом будет изменен только курсор для значка thumb_up
, который, как я предполагаю, является намерением.
Обновление:
Поскольку требуется только одно событие, это также можно сделать, используя синтаксис выражения в квадратных скобках для v-on
/ @
. например, * * одна тысяча тридцать две
@[getEventName(icon)]="onThumbIconClick"
Здесь getEventName
будет такой метод, как:
getEventName (icon) {
return icon === 'thumb_up' ? 'click' : null
}
Внутри v-on
есть специальная обработка, которая гарантирует, что слушатель не будет зарегистрирован, когда выражение оценивается как null
.
Лично я предпочитаю синтаксис объекта, который я описал ранее, но ради полноты я подумал, что стоит упомянуть.