#javascript #vue.js
#javascript #vue.js
Вопрос:
Я пытаюсь создать отображаемый компонент, который будет что-то делать, когда я нажимаю на него:
// A normal Vue component using a render function
Vue.component('greeting', {
methods: {
sayHello(){
alert('hello')
}
},
render(createElement){
var self = this
return createElement(
'button',
{
'@click': self.sayHello
},
'if you click here I will say hello')
}
})
new Vue({
el: '#app'
})
Я ожидаю оповещения при нажатии на кнопку. Насколько я могу судить, это будет отображать что-то вроде
<button @click="sayHello" />
где метод sayHello определен в экземпляре Vue.
Почему это не работает?
Комментарии:
1. Почему вы напрямую не используете
template
кнопку для создания?2. @Vipulw У меня есть кое-что более сложное, над чем я работаю, что требует передачи событий в отображаемые функции. Предполагается, что это минимальный пример, а не что-то полезное.
Ответ №1:
Похоже, что переданные события должны быть указаны как ‘on’, вот так:
{
on: {
click: somefunction
}
}
https://codepen.io/dvdgdnjsph/pen/NWNwYOQ
https://v3-migration.vuejs.org/breaking-changes/render-function-api.html#_3-x-syntax-2
Ответ №2:
Я создал рабочую копию вашего примера в этой скрипке. Я изменил способ записи события щелчка. Смотрите приведенный ниже фрагмент кода.
Щелчок рабочей кнопки с помощью функции визуализации
Vue.component('DraggableList', {
methods: {
sayHello() {
alert('hello')
}
},
render: function(createElement) {
var self = this;
return createElement(
'button', // tag name
{
on: {
click: this.sayHello
}
}, 'if you click here I will say hello'
)
}
})
new Vue({
el: '#app'
})
.grid{
display: grid;
grid-template-columns: repeat(2, 1fr);
padding: 2em;
grid-gap: 1em;
}
h1{
margin: 0;
padding: 0;
}
.grid input{
grid-column-start: 1;
grid-column-end: 3;
text-align: center;
font-size: 1.5em;
}
.polite{
font-family: cursive;
color: gray;
}
.rude{
font-family: serif;
font-weight: bold;
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div class="grid">
<draggable-list></draggable-list>
</div>
</div>
Комментарии:
1. Пожалуйста, объясните свой ответ и что вы сделали.
2. @Dharman Я обсудил подходы с человеком в комментариях вопросов, а затем только дал решение. Кроме того, включив фрагмент кода, это было довольно ясно для понимания. Будет помнить в следующий раз.