Maison > interface Web > Voir.js > Une brève analyse de Vue.set et this.$set dans Vue et un aperçu des scénarios d'utilisation !

Une brève analyse de Vue.set et this.$set dans Vue et un aperçu des scénarios d'utilisation !

青灯夜游
Libérer: 2022-03-04 19:48:39
avant
3058 Les gens l'ont consulté

Cet article parlera de Vue.set et this.$set dans Vue, et présentera l'utilisation et les scénarios d'utilisation de Vue.set et this.$set. J'espère qu'il sera utile à tout le monde !

Une brève analyse de Vue.set et this.$set dans Vue et un aperçu des scénarios d'utilisation !

1. Pourquoi Vue.set

En raison des limitations de JavaScript, Vue ne peut pas détecter les changements dans les tableaux et les objets dans les données, il ne déclenchera donc pas les mises à jour des vues. tutoriel vidéo vuejs

2. Solution

array

1. Utilisez la méthode de mutation fournie par Vue

Une brève analyse de Vue.set et this.$set dans Vue et un aperçu des scénarios dutilisation !

Vue encapsule ces méthodes de tableau JS, grâce auxquelles les mises à jour de tableau peuvent être détectées.

2. Remplacez l'intégralité du tableau d'origine

Dans l'exemple suivant, vm.items[1] = 'excess'

<body>
<div id="app">
    <ul>
        <li v-for="(item, index) in items">
            {{ index }} : {{ item }}
        </li>
    </ul>
</div>

<script>
let vm = new Vue({
    el: &#39;#app&#39;,
    data: {
        items: [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
    },
    created() {
        this.items = [&#39;a&#39;, &#39;test&#39;, &#39;c&#39;]
    }
})
</script>
</body>
Copier après la connexion

3. Utilisez Vue.set (voir ci-dessous)


Objet

.

1. Remplacez l'intégralité de l'objet d'origine

Dans l'exemple suivant, il s'agit d'ajouter une paire clé-valeur {test : 'newthing'} à l'objet

<body>
<div id="app">
    <ul>
        <li v-for="(value, name) in object">
            {{ name }} : {{ value }}
        </li>
    </ul>
</div>

<script>
let vm = new Vue({
    el: &#39;#app&#39;,
    data: {
        object: {
            title: &#39;How to do lists in Vue&#39;,
            author: &#39;Jane Doe&#39;,
            publishedAt: &#39;2016-04-10&#39;
        }
    },
    created() {
        this.object = {
            title: &#39;How to do lists in Vue&#39;,
            author: &#39;Jane Doe&#39;,
            publishedAt: &#39;2016-04-10&#39;,
            test: &#39;newthing&#39;
        }
    }
})
</script>
</body>
Copier après la connexion

2. )


3. Vue.set

Pour les tableaux

Vue ne peut pas détecter les modifications de tableau suivantes :

  • Lors de l'utilisation de la valeur d'index pour définir directement un élément de tableau, tel que vm. list[ 0]=newValue
  • vm.list[0]=newValue
  • 修改数组长度时,例如vm.list.length=newLength

举个栗子

var vm = new Vue({
  data: {
    items: [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
  }
})
vm.items[1] = &#39;x&#39; // 不是响应性的
vm.items.length = 2 // 不是响应性的
Copier après la connexion

这时可以使用Vue.set或者this.$set

使用方法

Vue.set(target,index,newValue)

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
Copier après la connexion
// this.$set
vm.$set(vm.items, indexOfItem, newValue)
Copier après la connexion

对于对象

Vue 无法检测 property 的添加或移除。由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的。

举个栗子

var vm = new Vue({
  data:{
    a:1
  }
})

// `vm.a` 是响应式的

vm.b = 2
// `vm.b` 是非响应式的
Copier après la connexion

使用方法

Vue.set(target,key,value)Lors de la modification de la longueur du tableau, par exemple vm.list.length=newLength

Par exemple

Vue.set(vm.someObject, &#39;b&#39;, 2)
Copier après la connexion
Cette fois, vous pouvez utiliser Vue.set ou this.$set

Usage

Vue.set(target,index,newValue)</code ></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">this.$set(this.someObject,&amp;#39;b&amp;#39;,2)</pre><div class="contentsignin">Copier après la connexion</div></div><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">const app = new Vue({ data: { a: 1 } // render: h =&gt; h(Suduko) }).$mount(&amp;#39;#app1&amp;#39;) Vue.set(app.data, &amp;#39;b&amp;#39;, 2)</pre><div class="contentsignin">Copier après la connexion</div></div><h3 data-id="heading-12"><p>Pour les objets<img src="https://img.php.cn/upload/image/851/547/687/164638308062437Une brève analyse de Vue.set et this.$set dans Vue et un aperçu des scénarios dutilisation !" title="164638308062437Une brève analyse de Vue.set et this.$set dans Vue et un aperçu des scénarios dutilisation !" alt="Une brève analyse de Vue.set et this.$set dans Vue et un aperçu des scénarios dutilisation !"/></p><p>Vue ne peut pas détecter l'ajout ou la suppression de propriétés. Étant donné que Vue effectuera une conversion getter/setter sur la propriété lors de l'initialisation de l'instance, la propriété doit exister sur l'objet de données pour que Vue la convertisse en réactif. <strong></strong>Par exemple</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">var vm=new Vue({ el:&amp;#39;#test&amp;#39;, data:{ //data中已经存在info根属性 info:{ name:&amp;#39;小明&amp;#39;; } } }); //给info添加一个性别属性 Vue.set(vm.info,&amp;#39;sex&amp;#39;,&amp;#39;男&amp;#39;);</pre><div class="contentsignin">Copier après la connexion</div></div><h4 data-id="heading-13"> <h2 data-id="heading-15">Comment utiliser<strong></strong> </h2> <code>Vue.set(target,key,value)

rrreeerrreee

Attention Vue n'autorise pas l'ajout dynamique de propriétés réactives au niveau racine

rrreee🎜🎜🎜🎜Vous ne pouvez utiliser que la méthode Vue.set(object, propertyName, value) pour ajouter des propriétés réactives aux 🎜objets imbriqués🎜🎜rrreee🎜🎜4 . Scénarios d'utilisation 🎜🎜🎜Lorsque nous modifions le tableau ou l'objet dans les données, certaines opérations ne répondent pas. Vue ne peut pas détecter les mises à jour des données, les mises à jour des vues ne seront donc pas déclenchées. Pour le moment, vous devez utiliser Vue.set() pour des mises à jour de données réactives. 🎜🎜 (Partage de vidéos d'apprentissage : 🎜tutoriel vuejs🎜, 🎜web front-end🎜)🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
vue
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Tutoriels associés
Recommandations populaires
Derniers cours
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal