Reputation: 500
I have three files:
I declare my template in the 'SingleFileComponent.js' file, import it in 'app_index.js', create my Vue instance there and then import both in my 'index.html', where I use
<single-file-component></single-file-component>
to create a button.
SingleFileComponent.js
export default {
template:"<button type='button' value='test'>{{ text }}</button>",
props: [
'text',
]
}
app_index.js
import SingleFileComponent from './SingleFileComponent.js';
new Vue({
el: '#app',
components: {
SingleFileComponent,
},
methods: {
on_click: function() {
alert('import')
}
}
});
index.html
<html>
<head>
<meta charset="utf-8">
<link rel="shortcut icon" href="#">
<script src="vue.min.js"></script>
<title>Vue.js Single File Component</title>
</head>
<body>
<div id="app">
<single-file-component id="test" text="Test" @click="on_click()"></single-file-component>
</div>
<div>
<button type="button" id="direct" @click="onclick()">Direct</button>
</div>
<script>
var direct = new Vue({
el: '#direct',
methods: {
onclick: function() {
alert('Direct instance')
}
}
})
</script>
<script type="module" src="singlefilecomponent.js"></script>
<script type="module" src="app_index.js"></script>
</body>
</html>
I want to call the 'on_click' method from my Vue instance, when a click event happens. But it doesn't call it nor does it give me an error.
It also doesn't call anything, when I replace
methods: {
on_click: function() {
alert('import')
}
}
with
filters: {
on_click: function() {
alert('import')
}
}
As stated above, I declared the method in the instance ('app_index.js'), which wasn't working.
Then I declared it in the component ('SingleFileComponent.js'), which wasn't working either.
But when I create a Vue instance in the HTML file itself and declare a method there and bind it with a click event, it works perfectly.
Where do I have to declare a method for my component, so that I can call it, when a click event happens on the button, which was created with <single-file-component>
tag?
Upvotes: 2
Views: 2030
Reputation: 24194
Modify SingleFileComponent.js
export default {
template:"<button type='button' v-on:click="onClick" value='test'>{{ text }}</button>",
props: [
'text',
],
methods: {
onClick: function(e) {
console.log('e: ', e);
alert('onClick method is invoked!');
}
}
}
Upvotes: 2