2017-06-16 20 views
20

VueJs 2.0 docs में मुझे props परिवर्तनों पर कोई भी हुक नहीं मिल सकता है।VueJs 2.0 - `props` परिवर्तनों के लिए कैसे सुनें

क्या VueJs में ऐसे हुक हैं जैसे onPropsUpdated() या इसी तरह के?

अद्यतन

@wostex के रूप में सुझाव दिया, मैं अपनी संपत्ति लेकिन कुछ भी नहीं बदला watch की कोशिश की। तब मुझे एहसास हुआ कि मैं एक विशेष मामला है:

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

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

मैं myProp कि माता-पिता घटक child घटक को प्राप्त करता गुजर रहा हूँ। फिर watch: {myProp: ...} काम नहीं कर रहा है।

+1

[VueJS 2.0 का संभावित डुप्लिकेट - प्रोप अपडेट पर एक घटक को हुक नहीं कर सकता] (https://stackoverflow.com/questions/44584078/vuejs-2-0-cant-hook-a-component-on-props-update) – Bert

+1

मुझे यकीन नहीं है कि मैं आपके मामले को सही ढंग से समझता हूं। क्या आप समझा सकते हैं कि आपका सटीक लक्ष्य क्या है? "जब कुछ होता है, तो मुझे कुछ चाहिए (जहां?)"। क्या आप मूल रूप से पैरेंट प्रोप वैल्यू को बदलने की कोशिश कर रहे हैं? यदि हां यह पूरी तरह से अलग मामला है। – wostex

+0

@ वोस्टेक्स, यहां [कोडपेन] है (https://codepen.io/Nobo/pen/ZyBVvo?editors=1010#0)। बुरी बात यह है कि कलम में यह काम कर रहा है ... – zatziky

उत्तर

23

आप watch सहारा सहारा बदलाव होने पर कुछ कोड निष्पादित करने के लिए कर सकते हैं:

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

वोस्टेक्स के लिए Thx, मैंने पहले से ही 'घड़ी' के साथ प्रयास किया है। आपके उदाहरण के कारण मुझे एहसास हुआ कि मेरा मामला थोड़ा अलग है। मैंने अपना प्रश्न अपडेट किया है। – zatziky

+1

यह घटक की तरह दिखता है WillReceiveProps(), उदाहरण के लिए धन्यवाद: डी – yussan

+0

@ युसन हां, लेकिन यह एक ही प्रोप पर लागू होता है जिसे आपको ट्रैक रखने की आवश्यकता होती है। – wostex

1

सुनिश्चित नहीं हैं कि आप इसे हल कर ली है, तो (और अगर मैं सही ढंग से समझ), लेकिन यहाँ मेरा विचार है:

अगर माता-पिता को मेरीप्रॉप प्राप्त होती है, और आप इसे बच्चे को पास करना चाहते हैं और इसे बच्चे में देखना चाहते हैं, तो माता-पिता को myProp (संदर्भ नहीं) की प्रतिलिपि रखना होगा।

इस प्रयास करें:

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 } 
     } 
    } 
    } 
} 

और html में:

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

वास्तव में आप जब ऐसी स्थितियों में जटिल संग्रह पर काम कर बहुत सावधान रहना होगा (कुछ समय के नीचे गुजर)

+0

अच्छा विचार। मैं फिलहाल इसे मान्य नहीं कर सकता। जब मैं फिर से वू के साथ काम करता हूं, तो मैं इसे देखूंगा। – zatziky

संबंधित मुद्दे