vuejs vue props example data component javascript vue.js momentjs vuejs2

javascript - example - vue props default



Vuejs y Vue.set(), matriz de actualizaciĆ³n (2)

EDITAR 2

  • Para todos los cambios de objeto que necesitan reactividad, use Vue.set(object, prop, value)
  • Para las mutaciones de la matriz, puede consultar la lista admitida actualmente here

EDITAR 1

Para vuex, querrá hacer Vue.set(state.object, key, value)

Original

Así que solo para otros que vienen a esta pregunta. Aparece en algún momento en Vue 2. * eliminaron this.items.$set(index, val) a favor de this.$set(this.items, index, val) .

Splice todavía está disponible y aquí hay un enlace a los métodos de mutación de matriz disponibles en vue here .

Soy nuevo en Vuejs. Hice algo, pero no sé si es la forma simple / correcta.

lo que quiero

Quiero algunas fechas en una matriz y actualizarlas en un evento. Primero probé Vue.set, pero no funcionó. Ahora, después de cambiar mi elemento de matriz:

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

Empujo () nada a la matriz y se actualizará ... Pero a veces el último elemento estará oculto, de alguna manera ... Creo que esta solución es un poco extraña, ¿cómo puedo hacerla estable?

El código simple está aquí:

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 no puede recoger sus cambios en el estado si manipula matrices como esta.

Como se explica en Common Beginner Gotchas , debe usar métodos de matriz como push, splice o lo que sea y nunca modificar los índices como a[2] = 2 ni la propiedad .length de una matriz.

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>