我有一个带有复选框输入的组件:
<template>
<input id='one' type='checkbox' v-on:change.native="$emit('change')" />
</template>
我正在其他组件中使用此组件:
<template>
....
<Checkbox v-on:change="change" />
....
</template>
<script>
import Checkbox from './components/Checkbox.vue'
export default {
components: {
Checkbox
},
methods: {
change: function (e) {
console.log(e);
},
}
</script>
我想要的是附加父组件方法,该方法必须指向子组件事件。
问题在于,更改复选框后,此change
事件不会触发。
答案 0 :(得分:1)
您需要将input
事件用于复选框。我还建议您在Checkbox
组件中使用v-on="$listeners",除非您确实需要将事件命名为'change'
。
Checkbox.vue
<template>
<input
type="checkbox"
v-on="$listeners"
>
</template>
index.vue
<template>
<Checkbox @input="input" />
</template>
<script>
import Checkbox from '~/components/Checkbox.vue';
export default {
components: {
Checkbox,
},
methods: {
input(e) {
console.log(e);
},
},
};
</script>
答案 1 :(得分:1)
.native
modifier用于组件,而不是用于本机窗口小部件。
有时您可能想直接收听本地事件 在组件的根元素上。在这种情况下,您可以使用 .v-on的.native修饰符
您可以在外部绑定中使用.native
来捕获change
事件从内部冒泡(因为本地事件通常会冒泡,而Vue事件不会冒泡),或您可以在内部和外部组件中都使用非.native
事件,以进行自己的冒泡。
下面的代码片段都可以做到:
new Vue({
el: '#app',
methods: {
change() {
console.log("Native change");
},
change2() {
console.log("Non-native");
}
},
components: {
myCheckbox: {
template: '#inner-template'
}
}
});
<script src="https://unpkg.com/vue@latest/dist/vue.js"></script>
<template id="inner-template">
<input id='one' type='checkbox' v-on:change="$emit('change')" />
</template>
<div id="app">
<my-checkbox v-on:change.native="change" @change="change2"></my-checkbox>
</div>