javascript - 单击事件侦听器不适用于 VueJS 中的组件
问题描述
HTML:
<ul>
<item
v-on:click="boom"
v-bind:product="item"
v-bind:key="item.id"
v-for="item in items"
></item>
</ul>
Javascript:
Vue.component('item', {
props: ['product'],
template: '<li><a href="#">{{ product.name }}</a></li>',
});
let app = new Vue({
el: 'ul',
data: {
items: [
{ id: 0, name: 'penda' },
{ id: 1, name: 'harla' },
{ id: 2, name: 'calar' },
],
},
methods: {
boom: function (e) {
alert('Aha!');
}
}
});
一切都很好,但boom
永远不会触发事件侦听器。你知道原因吗?
解决方案
用作@Pvl@click.native="boom"
回答。或者从父组件绑定自定义并从子组件发出。请运行并检查以下代码。
Vue.component('item', {
props: ['product'],
template: '<li @click="clickevent($event)"><a href="#">{{ product.name }}</a></li>',
methods:{
clickevent(e){
this.$emit('componentclick', e)
}
}
});
let app = new Vue({
el: 'ul',
data: {
items: [
{ id: 0, name: 'penda' },
{ id: 1, name: 'harla' },
{ id: 2, name: 'calar' },
],
},
methods: {
boom: function (e) {
alert('Aha!');
console.log(e)
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<ul>
<item
@componentclick="boom"
v-bind:product="item"
v-bind:key="item.id"
v-for="item in items"
></item>
</ul>
推荐阅读
- r - 如何从 R 中的特定列中删除“\”符号
- powershell - VS Code 中的 Cmder 集成与 PowerShell 未按预期工作
- python-3.x - 在 Windows 上打开文件名可能包含特殊字符的文件
- c# - 创建 c# SelectList 不指定值
- mysql - 多个连接错误的 SUM 记录
- php - 按名字和姓氏自动完成搜索
- android - 与数据库相关的错误未在 android studio 中创建
- java - 解析页面中的所有元素时,Jsoup 没有获取少数元素的文本
- mysql - 或者在列中设置 Null 值
- ios - Swift 中包含 AWSAPIGatewayResponse 的单元测试方法