[英]v-on:change.native doesn't bind in the parent component: Vue.js
我有一個帶有復選框輸入的組件:
<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
事件。
您需要為復選框使用input
事件。 我還建議在Checkbox
組件中使用v-on="$listeners" ,除非您確實需要將事件命名為'change'
。
復選框.vue
<template>
<input
type="checkbox"
v-on="$listeners"
>
</template>
索引.vue
<template>
<Checkbox @input="input" />
</template>
<script>
import Checkbox from '~/components/Checkbox.vue';
export default {
components: {
Checkbox,
},
methods: {
input(e) {
console.log(e);
},
},
};
</script>
.native
修飾符用於組件,而不是原生小部件。
有時您可能想直接監聽組件根元素上的本機事件。 在這些情況下,您可以將 .native 修飾符用於 v-on
您可以在外部綁定中使用.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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.