2017-06-16 49 views
20

VueJs 2.0 docs içinde props değişikliklerini dinleyecek hiçbir kanca bulamıyorum.VueJs 2.0 - "sahne" değişimlerini nasıl dinleyeceğiniz

VueJ'lerin onPropsUpdated() veya benzeri kancaları var mı? @wostex önerildiği gibi

Güncelleme

, benim mülkiyet ama hiçbir şey değişmedi watch çalıştı. Ben ana bileşeni child bileşenine aldığı myProp geçirerek

<template> 
    <child :my-prop="myProp"></child> 
</template> 

<script> 
    export default { 
     props: ['myProp'] 
    } 
</script> 

: Sonra ben özel bir durum var olduğunu fark etti. Sonra watch: {myProp: ...} çalışmıyor.

+1

(birkaç kez aşağı geçen) [VueJS 2.0 - Bir sahne güncellemesinde bileşen alamıyorum] olası kopyası (https://stackoverflow.com/questions/44584078/vuejs-2-0-cant-hook-a-component-on-props-update) – Bert

+1

Durumunuzu doğru anladığımdan emin değilim. Tam amacın ne olduğunu açıklayabilir misin? "Bir şey olduğunda, burada bir şeylerin olmasını istiyorum (nerede?"). Ebeveyn prop değerini manuel olarak değiştirmeye mi çalışıyorsunuz? Evet ise, bu tamamen farklı bir durumdur. – wostex

+0

@wostex, işte burada [CodePen] (https://codepen.io/Nobo/pen/ZyBVvo?editors=1010#0). Kötü olan şey kalemde çalışıyor ... – zatziky

cevap

23

Sen watch sahne sahne değişiklikleri üzerine bazı kod çalıştırmasına edebilirsiniz:

new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    text: 'Hello' 
 
    }, 
 
    components: { 
 
    'child' : { 
 
     template: `<p>{{ myprop }}</p>`, 
 
     props: ['myprop'], 
 
     watch: { 
 
     \t myprop: function(newVal, oldVal) { // watch it 
 
      console.log('Prop changed: ', newVal, ' | was: ', oldVal) 
 
     } 
 
     } 
 
    } 
 
    } 
 
});
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<div id="app"> 
 
    <child :myprop="text"></child> 
 
    <button @click="text = 'Another text'">Change text</button> 
 
</div>

+0

Wostex için Thx, zaten 'watch' ile denedim. Örneğiniz yüzünden vakamın biraz farklı olduğunu anladım. Sorumu güncelledim. – zatziky

+1

izle componentWillReceiveProps() gibi görünüyorsun, örneğin teşekkürler: D – yussan

+0

@yussan evet, ancak takip etmeniz gereken tek bir pervaneye uygulanır. – wostex

1

emin değil misiniz çözdük (ve eğer doğru anlamak), ama burada benim fikrim:

Ebeveynim MyProp'u alırsa ve çocuğa geçmesini ve bunu çocukta izlemesini istiyorsanız, ebeveynin myProp kopyası olmalıdır (referans olarak alınmaz).

bu deneyin:

new Vue({ 
    el: '#app', 
    data: { 
    text: 'Hello' 
    }, 
    components: { 
    'parent': { 
     props: ['myProp'], 
     computed: { 
     myInnerProp() { return myProp.clone(); } //eg. myProp.slice() for array 
     } 
    }, 
    'child': { 
     props: ['myProp'], 
     watch: { 
     myProp(val, oldval) { now val will differ from oldval } 
     } 
    } 
    } 
} 

ve html:

<child :my-prop="myInnerProp"></child> 

aslında bu tür durumlarda karmaşık koleksiyonları üzerinde çalışırken çok dikkatli olmak zorunda

+0

İyi fikir. Bunu şu anda doğrulayamıyorum. Tekrar bir vue ile çalıştığımda kontrol edeceğim. – zatziky