2015-12-15 20 views
16
ready: function() { 
    this.$watch('things', function(){console.log('a thing changed')}, true); 
} 

things की सरणी वस्तुओं [{foo:1}, {foo:2}]

$watch जब एक वस्तु जोड़ा या हटा दिया जाता है का पता लगाता है, लेकिन नहीं की एक सरणी है जब एक वस्तु पर मान बदल रहे हैं। मैं उसे कैसे कर सकता हूँ?

उत्तर

32

आप options के रूप में बुलियन के बजाय एक वस्तु पारित करना चाहिए, ताकि:

ready: function() { 
    this.$watch('things', function() { 
    console.log('a thing changed') 
    }, {deep:true}) 
} 

या आप vue उदाहरण इस तरह में द्रष्टा सेट कर सकते हैं:

new Vue({ 
    ... 
    watch: { 
    things: { 
     handler: function (val, oldVal) { 
     console.log('a thing changed') 
     }, 
     deep: true 
    } 
    }, 
    ... 
}) 

[demo]

+0

अच्छा, यह एक प्रवास मुद्दा था। वू के आखिरी संस्करण में मैंने 'सत्य' का उपयोग अंतिम तर्क के रूप में किया था जिसका अर्थ है 'गहरा'। Ty! –

+0

मेरे लिए काम किया। धन्यवाद! – Lorenzo

+0

'तैयार' ने नाम 2.0 में बदलकर 'आरोहित' कर दिया है! – user1506145

1

हैं किसी को किसी आइटम को सरणी के अंदर बदला गया था, कृपया इसे जांचें:

JSFiddle Example

पोस्ट उदाहरण कोड:

new Vue({ 
    ... 
    watch: { 
    things: { 
     handler: function (val, oldVal) { 
     var vm = this; 
     val.filter(function(p, idx) { 
      return Object.keys(p).some(function(prop) { 
       var diff = p[prop] !== vm.clonethings[idx][prop]; 
       if(diff) { 
        p.changed = true;       
       } 
      }) 
     }); 
     }, 
     deep: true 
    } 
    }, 
    ... 
})