Je suis nouveau à Vuejs. Fait quelque chose, mais je ne sais pas si c'est simple/correct.
ce que je veux
Je veux des dates dans un tableau et les mettre à jour sur un événement. J'ai d'abord essayé Vue.set, mais ça n'a pas marché. Maintenant, après avoir changé mon élément de tableau:
this.items[index] = val;
this.items.Push();
I Push () rien au tableau et il va mettre à jour .. Mais parfois, le dernier élément sera caché, en quelque sorte ... Je pense que cette solution est un peu hacky, comment puis-je le rendre stable?
Le code simple est ici:
new Vue({
el: '#app',
data: {
f: 'DD-MM-YYYY',
items: [
"10-03-2017",
"12-03-2017"
]
},
methods: {
cha: function(index, item, what, count) {
console.log(item + " index > " + index);
val = moment(this.items[index], this.f).add(count, what).format(this.f);
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>
VueJS ne peut pas récupérer vos changements d'état si vous manipulez des tableaux comme celui-ci.
Comme expliqué dans Common Beginner Gotchas , vous devez utiliser des méthodes de type tableau, telles que Push, splice ou autre, et ne jamais modifier les index tels que a[2] = 2
ni la propriété .length d'un tableau.
new Vue({
el: '#app',
data: {
f: 'DD-MM-YYYY',
items: [
"10-03-2017",
"12-03-2017"
]
},
methods: {
cha: function(index, item, what, count) {
console.log(item + " index > " + index);
val = moment(this.items[index], this.f).add(count, what).format(this.f);
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>
Vue.set(object, prop, value)
.Pour la vuex, vous voudrez faire Vue.set(state.object, key, value)
Donc, juste pour les autres qui viennent à cette question. Il apparaît à un moment donné dans Vue 2. * ils ont supprimé this.items.$set(index, val)
au profit de this.$set(this.items, index, val)
.
L'épissure est toujours disponible et voici un lien vers les méthodes de mutation de tableau disponibles dans vue lien .