Из внешнего источника (например, API) я получаю определение компонента:
{
"component": "b-btn",
"content": "Button",
"attr": {
"title": "Edit"
},
"events": {
"click": "doSomething"
}
}
Это определение используется с динамическим компонентом:
<component :is="item.component" v-bind="item.attr">
{{ item.content }}
</component>
и работает должным образом (показана кнопка vue-bootstrap с заголовком «Редактировать» и текстом кнопки «Кнопка»).
Теперь я хочу добавить события. Начиная с VueJS 2.4 (https://vuejs.org/v2/api/#v-on), вы можете определять события в синтаксисе объекта, например <button v-on="{ mousedown: doThis, mouseup: doThat }"></button>
, я думал, что простое добавление v-on="item.events"
может работать:
<component :is="item.component" v-bind="item.attr" v-on="item.events">
{{ item.content }}
</component>
Но это не так, поскольку значение свойства объекта click
является строкой ("doSomething"
) и не может быть вызвано.
// Just to make it clear
{"click": "doSomething"} != {"click": doSomething}
Есть ли способ привязать динамические события (из JSON) к компоненту?