Recherche…


Introduction

Lorsque vous essayez de définir une valeur d'un élément à un index particulier d'un tableau initialisé dans l'option de données, la vue ne peut pas détecter la modification et ne déclenche pas de mise à jour de l'état. Afin de surmonter cet avertissement, vous devez soit utiliser Vue. $ Set ou utiliser la méthode Array.prototype.splice.

Utilisation de Vue. $ Set

Dans votre méthode ou tout crochet de cycle de vie qui modifie l'élément de tableau à un index particulier

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');
        }
    }
}) 

Voici le lien vers le violon

Utiliser Array.prototype.splice

Vous pouvez effectuer le même changement au lieu d'utiliser Vue.$set en utilisant le splice() du prototype Array

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');
        }
    }
}) 

Pour un tableau imbriqué

Si vous avez un tableau imbriqué, vous pouvez procéder comme suit

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

Voici le lien vers le jsfiddle

Tableau d'objets contenant des tableaux

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');
        }
    }
}) 

Voici le lien vers le violon



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow