2017-04-11 7 views
7

dzięki za przeczytanie mojego pytania.Przekaż dane od dziecka do rodzica w Vuejs (czy to jest tak skomplikowane?)

czytałem o to

vuejs update parent data from child component

https://forum.vuejs.org/t/passing-data-back-to-parent/1201/2

Koncepcja jest taka sama, muszę przekazać obiekt danych od dziecka do rodzica, Użyłem $ emitują do przekazywania danych do składnik macierzysty, ale nie działa. Czy wiesz, co jest nie tak? Sprawdź mój kod tutaj:

Vue.component('list-products', { 
 
    delimiters: ['[[', ']]'], 
 
    template: '#list-products-template', 
 
    props: ['products'], 
 
    data: function() { 
 
    return { 
 
     productSelected: {} 
 
    } 
 
    }, 
 
    methods: { 
 
    showDetailModal: function (product) { 
 
    \t console.log('click product in child, how can i pass this product to productSelected data in parent?'); 
 
     console.log(product); 
 
     this.productSelected = product; 
 
     this.$emit('clickedShowDetailModal', product); 
 
    } 
 
    } 
 
}); 
 

 

 
var app = new Vue({ 
 
    delimiters: ['[[', ']]'], 
 
    el: '#resultComponent', 
 
    data: { 
 
    listProducts: [ 
 
     \t {'name':'test1',id:1}, 
 
     {'name':'test2',id:2}, 
 
     {'name':'test3',id:3} 
 
    ], 
 
    productSelected: {} 
 
    }, 
 
    methods: { 
 
    clickedShowDetailModal: function (value) { 
 
     console.log('value'); 
 
     console.log(value); 
 
     this.productSelected = value; 
 
    } 
 
    } 
 
});
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<div id="resultComponent" data-toggler=".small-up-2" class="row small-up-1"> 
 
    <list-products :products="listProducts"></list-products> 
 
</div> 
 

 
<script type="text/x-template" id="list-products-template"> 
 
    <div> 
 
    <div class="column column-block" v-for="(product, index) in products" :product="product" :index="index" :key="product.id"> 
 
    <li class="more-benefits"> 
 
     <a @click="showDetailModal(product)">Click me [[ product.name ]] and check console.log »</a> 
 
    </li> 
 
    </div> 
 
    </div> 
 
</script>

góry dziękuję.

Odpowiedz

7

Nie słuchasz wydarzenia. Zmieniłem nazwę wydarzenia na clicked-show-detail. Spróbuj tego.

W metodzie showDetailModal Twojego komponentu.

this.$emit('clicked-show-detail', product); 

W twojej Vue.

<list-products :products="listProducts" @clicked-show-detail="clickedShowDetailModal"></list-products> 

Example.

+0

Bardzo dziękuję Bert, odpowiedź na nie działa! : D Czy możesz podać więcej informacji na temat instrukcji "clicked-show-detail"? Bo "wciąż mam wątpliwości na ten temat. – Sommer

+0

@Sommer '@ clicked-show-detail' to krótki sposób wypowiedzenia' v-on: clicked-show-detail'. W ten sposób definiujesz detektor zdarzeń. W takim przypadku, powiedzmy, wywołaj metodę 'clickedShowDetailModal' po wywołaniu zdarzenia. Zobacz https://vuejs.org/v2/guide/events.html#Listening-to-Events – Bert

+0

zrozumiałe! Jeszcze raz dziękuję! – Sommer

Powiązane problemy