Здесь я пытаюсь добиться того, что когда я нажимаю на элемент в Item-card-product-choices.vue
, он запускает selectPC
с аргументом productChoice.id
, и это также заставит родителя прослушивать это событие и одновременно получать аргумент. Я следую документу, чтобы сделать но родитель, похоже, не слушает selectPC
. Итак, пожалуйста, решите следующие вопросы, семпай:
- что не так с тем, как родитель слушает дочернее событие?
- когда родитель слушает, как получить аргумент, который ребенок также использует в событии? Спасибо.
Item-card-product-choices.vue
<template>
<ul class="product-choices">
<li
v-for="productChoice in productChoices"
class="product-choice"
@click.prevent="selectPC(productChoice.id)"
>
<svg v-if="productChoice.color === 'red'" width="20" height="20">
<rect width="20" height="20" style="fill:#FF3333"></rect>
</svg>
......
......
......
</li>
</ul>
</template>
<script>
export default {
props:[
'index',
'product'
],
data() {
return {
productChoices:{},
}
},
methods:{
selectPC(productChoice){
var vm = this;
vm.$emit('select',productChoice)
},
}
}
</script>
Родитель.vue
<template>
<div>
....
<product-choices :product="product" @selectPC="getSelected(productChoice)"></product-choices>
....
</div>
</template>
<script>
import productChoices from './Item-card-product-choices.vue';
export default {
components:{
'product-choices':productChoices
},
data(){
return{
productChoiceSelected:{},
}
},
methods:{
getSelected(selected){
var vm = this
alert(1) // this is what I added to test if it listens
vm.$on('select',function(selected){
vm.$http.get('/getProductChoice/'+vm.product.id+'/'+selected).then((response)=>{
vm.productChoiceSelected = response.data
});
})
}
}
</script>