Я могу решить эту проблему в jquery, используя метод $(document).on('click', '.newButton', function(){});, как я могу решить то же самое в VUE
new Vue ({
el: '#app',
data: {
oldButton: function () {
$('#app').append('<button v-on:click = "newButton">The New Button</button>');
},
newButton: function () {
console.info('Hello World!');
},
},
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id = "app">
<button v-on:click = "oldButton">The Old Button</button>
</div>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В vue.js вы обычно не управляете DOM в javascript; Если вы хотите условно показать компонент, вы можете использовать Директивы v-if или v-show; А также вы должны определить свои функции как methods вместо data:
new Vue ({
el: '#app',
data: {
showNewButton: false
},
methods: {
oldButton: function () {
this.showNewButton = true;
},
newButton: function () {
console.info('Hello World!');
},
},
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id = "app">
<button v-on:click = "oldButton">The Old Button</button>
<button v-if = "showNewButton" v-on:click = "newButton">The New Button</button>
</div>Если вы хотите иметь набор кнопок:
const app = new Vue({
el: '#app',
data: {
btns: []
},
methods: {
addBtn() {
this.btns.push({
name: 'Dynamic Button'
})
},
showMsg(index) {
console.info('Hello World!, from Button ' + index)
}
}
})
А также:
<div id = "app">
<ul>
<li v-for = "(btn, index) in btns">
<button @click = "showMsg(index)" type = "text"> {{ btn.name}}</button>
</li>
</ul>
<button @click = "addBtn">Add Button</button>
</div>
Большое спасибо, вот что я думаю
Взгляните на это, надеюсь, это поможет.