Giả sử tôi có một ví dụ Vue chính có các thành phần con. Có cách nào gọi một phương thức thuộc một trong các thành phần này từ bên ngoài thể hiện Vue không?
Đây là một ví dụ:
var vm = new Vue({
el: '#app',
components: {
'my-component': {
template: '#my-template',
data: function() {
return {
count: 1,
};
},
methods: {
increaseCount: function() {
this.count++;
}
}
},
}
});
$('#external-button').click(function()
{
vm['my-component'].increaseCount(); // This doesn't work
});
<script src="http://vuejs.org/js/vue.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="app">
<my-component></my-component>
<br>
<button id="external-button">External Button</button>
</div>
<template id="my-template">
<div style="border: 1px solid; padding: 5px;">
<p>A counter: {{ count }}</p>
<button @click="increaseCount">Internal Button</button>
</div>
</template>
Vì vậy, khi tôi nhấp vào nút bên trong, increaseCount()
phương thức được liên kết với sự kiện nhấp của nó để nó được gọi. Không có cách nào để liên kết sự kiện với nút bên ngoài, sự kiện nhấp mà tôi đang nghe với jQuery, vì vậy tôi sẽ cần một số cách khác để gọi increaseCount
.
BIÊN TẬP
Có vẻ như điều này hoạt động:
vm.$children[0].increaseCount();
Tuy nhiên, đây không phải là một giải pháp tốt vì tôi đang tham chiếu thành phần theo chỉ số của nó trong mảng con và với nhiều thành phần, điều này khó có thể giữ nguyên và mã ít đọc hơn.