2017-02-13 6 views
5

कृपया नीचे मेरे स्निपेट का संदर्भ लें। मैं बदले गए मॉडल का पुराना मूल्य कैसे प्राप्त कर सकता हूं, इस मामले में vuejs में उम्र है?परिवर्तन घटना पर जब Vuejs पुराने मान प्राप्त करते हैं

var app = new Vue({ 
 
    el:"#table1", 
 
    data:{ 
 
    items:[{name:'long name One',age:21},{name:'long name Two',age:22}] 
 
    }, 
 
    methods:{ 
 
    changeAge:function(item,event){ 
 
     alert(item.age); 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<table class="table table-cart" id="table1"> 
 
    <thead> 
 
    <tr> 
 
     <th>Name</th> 
 
     <th>Age</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr v-for="(item,index) in items"> 
 
     <td>{{item.name}} :</td>  
 
     <td> 
 
     <input type="text" name="qty" 
 
       v-model="item.age" 
 
       @change="changeAge(item,$event)"> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

मैं घड़ी का उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं उम्र मदों की एक सरणी देखने में कोई मदद नहीं मिल पाई है।

उत्तर

3

आपको here समझाया गया तत्व बदलने पर तत्व का पुराना मान नहीं मिलता है। ऑब्जेक्ट में परिवर्तन के संदर्भ में here समझाए गए अनुसार, आप ऑब्जेक्ट को देखते समय पुराने मान नहीं प्राप्त कर सकते हैं।

इन हल करने के लिए आप एक परिकलित प्रॉपर्टी जो आपके items डेटा का क्लोन हो जाएगा बना सकते हैं, और आप भी इस गणना संपत्ति पर एक द्रष्टा शब्दों में कहें, पुराने मूल्य को जानने के लिए कर सकते हैं नीचे काम कर कोड देखें:

var app = new Vue({ 
 
    el:"#table1", 
 
    data:{ 
 
    items:[{name:'long name One',age:21},{name:'long name Two',age:22}] 
 
    }, 
 
    watch:{ 
 
    clonedItems: function(newVal, oldVal){ 
 
     alert(JSON.stringify(newVal)); 
 
     alert(JSON.stringify(oldVal)); 
 
    } 
 
    }, 
 
    computed:{ 
 
    clonedItems: function(){ 
 
     return JSON.parse(JSON.stringify(this.items)) 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<table class="table table-cart" id="table1"> 
 
    <thead> 
 
    <tr> 
 
     <th>Name</th> 
 
     <th>Age</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr v-for="(item,index) in items"> 
 
     <td>{{item.name}} :</td>  
 
     <td> 
 
     <input type="text" name="qty" 
 
       v-model="item.age"> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

इसका मतलब यह है कि सभी परिवर्तन के लिए इस गतिविधि सक्रिय की जा रही है। मुझे केवल item.age परिवर्तन घटना होने की आवश्यकता है। आपका समाधान अच्छा है लेकिन क्या इसे विशिष्ट बनाने का कोई तरीका है? जैसे कि मैं बैकस्पेस बनाता हूं, ईवेंट को भी निकाल दिया जा रहा है – madi

+0

@madi एक विकल्प एक गणना की गई संपत्ति हो सकती है, जो उम्र लौटाती है, और उस पर नजर रखती है। – Saurabh

+1

बात गणना की गई संपत्ति में है, हम वर्तमान आइटम प्राप्त करने में सक्षम नहीं हैं। तो वह है कि भ्रमित है कि। विश्वास नहीं कर सकता है कि वू की इतनी बड़ी सीमा – madi

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