Ricerca…


introduzione

Quando si tenta di impostare un valore di un elemento in un determinato indice di un array inizializzato nell'opzione dati, Vue non può rilevare la modifica e non attiva un aggiornamento allo stato. Per superare questa avvertenza dovresti utilizzare Vue di vue. $ Set o usare il metodo Array.prototype.splice

Usando Vue. $ Set

Nel metodo o in qualsiasi hook del ciclo di vita che modifica l'elemento dell'array in un indice particolare

new Vue({
    el: '#app',
    data:{
        myArr : ['apple', 'orange', 'banana', 'grapes']
    },
    methods:{
        changeArrayItem: function(){
            //this will not work
            //myArr[2] = 'strawberry';
            
            //Vue.$set(array, index, newValue)
            this.$set(this.myArr, 2, 'strawberry');
        }
    }
}) 

Ecco il link al violino

Utilizzando Array.prototype.splice

È possibile eseguire la stessa modifica anziché utilizzare Vue.$set utilizzando la splice() del prototipo di Array splice()

new Vue({
    el: '#app',
    data:{
        myArr : ['apple', 'orange', 'banana', 'grapes']
    },
    methods:{
        changeArrayItem: function(){
            //this will not work
            //myArr[2] = 'strawberry';
            
            //Array.splice(index, 1, newValue)
            this.myArr.splice(2, 1, 'strawberry');
        }
    }
}) 

Per matrice nidificata

Se hai una matrice annidata, puoi fare quanto segue

new Vue({
    el: '#app',
    data:{
        myArr : [
            ['apple', 'banana'],
            ['grapes', 'orange']
        ]
    },
    methods:{
        changeArrayItem: function(){
            this.$set(this.myArr[1], 1, 'strawberry');
        }
    }
})

Ecco il link al jsfiddle

Matrice di oggetti contenenti matrici

new Vue({
    el: '#app',
    data:{
        myArr : [
            {
                name: 'object-1',
                nestedArr: ['apple', 'banana']
            },
            {
                name: 'object-2',
                nestedArr: ['grapes', 'orange']
            }
        ]
    },
    methods:{
        changeArrayItem: function(){
            this.$set(this.myArr[1].nestedArr, 1, 'strawberry');
        }
    }
}) 

Ecco il link al violino



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow