• Vue循环渲染 v-for和v-if,key


     1、v-for和v-if

    常规用法

    1. <div class="app">
    2. <div v-for="el in arr">
    3. <div v-if="el.number>200">
    4. <h1>{{el.number}}h1>
    5. <h2>{{el.name}}h2>
    6. div>
    7. div>
    8. div>
    1. new Vue({
    2. el: ".app",
    3. data: {
    4. arr: [{
    5. number: 111,
    6. name: "Bob"
    7. }, {
    8. number: 222,
    9. name: "jack"
    10. }, {
    11. number: 333,
    12. name: "Steven"
    13. }]
    14. },
    15. }
    16. )

    效果图

    常规的方法会引起一个问题:v-if每次判断成功时都会 再创建一个div来装得到的数据,相当于我们用了两个div来装

     为了解决这一问题我们可以使用冰元素

    1. <div class="app">
    2. <div v-for="el in arr">
    3. <template v-if="el.number>200">
    4. <h1>{{el.number}}h1>
    5. <h2>{{el.name}}h2>
    6. template>
    7. div>
    8. div>

    这样我们就可以解决这一问题

     2、key

    data中for循环的容器数据个数发生变化时,会跟for中的vm节点个数作比较如果数据多了,会在vm节点后面增加对应数量的节点,并不会重新创建所有节点,然后vm去更新对应的DOM然后就去刷新数据到界面: 按照for的数据容器中的数据顺序来渲染如果用户以前操作过旧节点,那么新数据顺序可能会出现跟旧节点顺序不匹配的效果(旧节点跟旧数据没有对应起来)

    例如:

    1. <div id="app">
    2. <h1>点击按钮h1>
    3. <div v-for="el in arr">
    4. <input type="checkbox" :value="el.id">
    5. <b>{{el.title}}b>
    6. div>
    7. <button @click="addmore">加载更多button>
    8. div>
    1. new Vue({
    2. el:"#app",
    3. data:{
    4. id:5,
    5. arr:[{id:1,title:"游泳"},
    6. {id:2,title:"跑步"},
    7. {id:3,title:"跳远"},
    8. {id:4,title:"爱好"}]
    9. },
    10. methods:{
    11. addmore(){
    12. let obj={id:this.id++,title:"爱好"+this.id}
    13. // this.arr.push(obj)
    14. this.arr.unshift(obj)
    15. }
    16. }
    17. })

    界面显示

    当选择其中的任意复选框按钮后,

    此时若点击加载更多按钮,就出现复选框的bug:复选框按钮并没有跟随移动,始终在之前的位置

    为了解决这一问题引入key值:

          for循环时把数据跟创建的节点利用给元素绑定唯一key值

     所以在之前的HTML代码中稍作修改如:

    这样就可以对其进行绑定

     

  • 相关阅读:
    1361:产生数(Produce)
    LLM Saturation与多模态AI的崛起
    653. 钞票
    牛客刷题——前端面试【六】谈一谈 v-if、v-show、v-for(区别、注意事项)
    【云原生-Kubernetes篇】深入刨析Kubernetes
    2016年亚太杯APMCM数学建模大赛C题影视评价与定制求解全过程文档及程序
    【自然语言处理】关系抽取 —— CoIn 讲解
    [漏洞复现] jenkins 远程代码执行 (CVE-2019-100300)
    接口设计的18条军规
    Flink DataStream 体系
  • 原文地址:https://blog.csdn.net/m0_63470734/article/details/126614090