2017-03-15 21 views
19

मैं वूज के लिए नया हूं। कुछ बनाया, लेकिन मुझे नहीं पता कि यह सरल/सही तरीका है।Vuejs और Vue.set(), अद्यतन सरणी

जो मैं चाहता

मैं एक सरणी में कुछ दिनांकों चाहते हैं और एक घटना पर उन्हें अपडेट करें। सबसे पहले मैंने Vue.set की कोशिश की, लेकिन यह काम नहीं कर सका। अब मेरी सरणी आइटम बदलने के बाद:

this.items[index] = val; 
this.items.push(); 

मैं धक्का() सरणी के लिए कुछ नहीं है और यह अद्यतन करेगा .. लेकिन कभी कभी अंतिम आइटम को छिपा दिया जाएगा, किसी भी तरह ... मुझे लगता है कि इस समाधान एक सा hacky है, मैं इसे स्थिर कैसे बना सकता हूं?

सरल कोड यहाँ है:

new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    \t f: 'DD-MM-YYYY', 
 
    items: [ 
 
     "10-03-2017", 
 
     "12-03-2017" 
 
    ] 
 
    }, 
 
    methods: { 
 
    
 
    cha: function(index, item, what, count) { 
 
    \t console.log(item + " index > " + index); 
 
     val = moment(this.items[index], this.f).add(count, what).format(this.f); 
 
    \t \t this.items[index] = val; 
 
     this.items.push(); 
 
     console.log("arr length: " + this.items.length); 
 
    } 
 
    } 
 
})
ul { 
 
    list-style-type: none; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.11/vue.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script> 
 
<div id="app"> 
 
    <ul> 
 
    <li v-for="(index, item) in items"> 
 
    <br><br> 
 
     <button v-on:click="cha(index, item, 'day', -1)"> 
 
     - day</button> 
 
     {{ item }} 
 
     <button v-on:click="cha(index, item, 'day', 1)"> 
 
     + day</button> 
 
    <br><br> 
 
    </li> 
 
    </ul> 
 
</div>

उत्तर

10

VueJS अगर आप इस तरह सरणियों में हेरफेर पिक राज्य में अपने परिवर्तन नहीं कर सकते।

जैसा कि Common Beginner Gotchas में बताया गया है, आपको पुश, स्प्लिस या जो कुछ भी a[2] = 2 और किसी सरणी की लम्बाई संपत्ति जैसे इंडेक्स को संशोधित नहीं करना चाहिए।

new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    \t f: 'DD-MM-YYYY', 
 
    items: [ 
 
     "10-03-2017", 
 
     "12-03-2017" 
 
    ] 
 
    }, 
 
    methods: { 
 
    
 
    cha: function(index, item, what, count) { 
 
    \t console.log(item + " index > " + index); 
 
     val = moment(this.items[index], this.f).add(count, what).format(this.f); 
 

 

 
\t this.items.$set(index, val) 
 
     console.log("arr length: " + this.items.length); 
 
    } 
 
    } 
 
})
ul { 
 
    list-style-type: none; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.11/vue.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script> 
 
<div id="app"> 
 
    <ul> 
 
    <li v-for="(index, item) in items"> 
 
    <br><br> 
 
     <button v-on:click="cha(index, item, 'day', -1)"> 
 
     - day</button> 
 
     {{ item }} 
 
     <button v-on:click="cha(index, item, 'day', 1)"> 
 
     + day</button> 
 
    <br><br> 
 
    </li> 
 
    </ul> 
 
</div>

+0

परफेक्ट धन्यवाद करना चाहता हूँ जाएगा। मैं 3 मिनट में उत्तर स्वीकार कर सकता हूं। मैं Vue.set() या $ सेट का उपयोग कर थोड़ा उलझन में था। लेकिन इस दस्तावेज धन्यवाद धन्यवाद होगा। –

+1

डॉक्स में कहा गया है, $ सेट सिर्फ एक सुंदर है .plice()। यह समझ में आता है क्योंकि वे दस्तावेज़ों में कहते हैं कि आपको इसकी विधियों का उपयोग करके सरणी को संशोधित करना चाहिए। – Borjante

+0

Pls स्पेस इंडेंट्स के साथ टैब इंडेंट्स को गठबंधन नहीं करते हैं, टैब का आकार एसई ऐप पर स्पष्ट रूप से अलग होता है, जिससे आपके कोड – Ferrybig

32

तो बस जो दूसरों को इस सवाल के लिए आते हैं के लिए। यह Vue 2 में किसी बिंदु पर दिखाई देता है। * this.$set(this.items, index, val) के पक्ष में उन्होंने this.items.$set(index, val) हटा दिया।

स्प्लिस अभी भी उपलब्ध है और यहां link में उपलब्ध सरणी उत्परिवर्तन विधियों का एक लिंक है।

संपादित

vuex के लिए आप इस लिंक के लिए Vue.set(state.object, key, value)

+1

को पढ़ना मुश्किल हो जाता है, जो कि मैं देख रहा था, फ़ंक्शन सरल रिलीज में बदल गया; –

+0

मुझे 'इंडेक्स' के रूप में प्रदान करने के लिए किस स्ट्रिंग की आवश्यकता है? – Kokodoko

+0

@ कोकोदोको क्या आप स्पष्ट कर सकते हैं कि आप क्या करने की कोशिश कर रहे हैं? यदि यह एक सरणी है तो यह सूचकांक के लिए एक संख्या होना चाहिए। यदि आप किसी ऑब्जेक्ट पर फ़ील्ड सेट कर रहे हैं तो एक स्ट्रिंग होगी। –

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