• track-by的使用


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>

    </style>
    <script src="vue.js"></script>
    <script>

    </script>
    </head>
    <body>
    <div id="box">
    <input type="button" value="添加" @click="add">
    <ul>
    <li v-for="val in arr" track-by="$index">
    {{val}}
    </li>
    </ul>
    </div>
    <script>

    var vm=new Vue({
    data:{
    arr:['apple','pear','orange']
    },
    methods:{
    add:function(){
    this.arr.push('tomato');
    }
    }
    }).$mount('#box');

    </script>
    </body>
    </html>

    点击页面会添加'tomato',但是继续点击不会添加'tomato',会给出提示[Vue warn]: Duplicate value found in v-for="val in arr": "tomato". Use track-by="$index" if you are expecting duplicate values.

    解决办法:

    <li v-for="val in arr" track-by="$index">  改成 <li v-for="val in arr" track-by="$index">

    因为 v-for 默认通过数据对象的特征来决定对已有作用域和 DOM 元素的复用程度,这可能导致重新渲染整个列表。但是,如果每个对象都有一个唯一 ID 的属性,便可以使用 track-by 特性给 Vue.js 一个提示,Vue.js 因而能尽可能地复用已有实例。

    按你的需求是希望循环comments,如果comments中没有需要复用的数据,可以直接写
    <component v-for="comment in comments" track-by="$index"></component>
    ,如果所有的comments可以用id区分,则可以使用
    <component v-for="comment in comments" track-by="id"></component>, 然后在替换数组comments 时,如果 Vue.js 遇到一个包含 id: 'xxx' 的新对象,它知道它可以复用这个已有对象的作用域与 DOM 元素。

  • 相关阅读:
    vmware vcenter appliance dhcp 改为 静态IP导致web service认证失败
    pptp记录用户登陆日志
    MySQL内存使用分析
    mysql慢查日志分析工具 percona-toolkit
    my.cnf详解
    ios9 升级后 企业版app plist无法安装
    redmine发送邮件
    swap文件
    算法--合法序括号序列判断
    算法--空格替换
  • 原文地址:https://www.cnblogs.com/zhangzhiqin/p/9488183.html
Copyright © 2020-2023  润新知