zoukankan      html  css  js  c++  java
  • Vue用v-for数据更新后视图并没更新--框架使用的是iview

    直接上反面示例 html,html直接是一个普通的v-for

    
    
    // <Row>是iview的组件里的标签
    <Row>这里是一些元素</Row>
    <div
        class="admission-card"
        v-for="item in admissionList"
        :key="item.id"
    >
       <div class="admission-card-body">
              <div class="head flexbox between">
                <div>{{item.name}}</div>
                </div>
              </div>
        </div>
    </div>

    data里面也给了默认值

    data () {
        return {
        admissionList: [],
        bventAdmissionData:[
          {name:'李四'},
          {name:'张三'}
        ] } },
    mounted () {
        this.admissionList = JSON.parse(JSON.stringify(this.bventAdmissionData))
      },
    methods: {
        searchAdmissionList () {
          const myData = JSON.parse(JSON.stringify(this.bventAdmissionData))
          if (this.query) {
            // this.$set(this,'admissionList',myData.filter(item => item.name.indexOf(this.query) >= 0))
            this.admissionList = myData.filter(item => item.name.indexOf(this.query) >= 0)
          } else {
            // this.$set(this,'admissionList',myData)
            this.admissionList = myData
          }
        }
    }

    看起来完全没有问题,但是很奇怪的事情发生了,页面显示admissionList是有值的,但是视图没有渲染,如下图

     这时解决问题的思路首先想到几个

    1.确认data里给了默认值

    2.数组赋值改为$set的方式--没有用

    然后试了2个奇怪的解决办法

    1.data里admissionList的默认值修改为[{}]--视图成功渲染

    2.mounted生命周期改为created,视图渲染前改数组 --- 视图成功渲染

    解决这个问题之后,做了个搜索功能,奇怪的事情又发生了,第一次搜索结果正确,如下图

     但是清空条件之后再搜索,问题又出现了,admissionList是有4个值的,但是视图没有刷新,还是2个值,数据和视图没有绑定的感觉

     然后试了各种方法,用computed计算属性,用上面的注释代码$set,完全没有用,折腾了半天,最后以一种奇葩的方式解决了!

    给html的</Row>标签下面的div包一个</Row>标签,然后所有的问题完美解决。。。有人知道原理的可以留言一下

    结论:

    1.完全按照标准写代码

    2.data的默认值一定要存在

    3.可以用$set改数组尝试一下

    4.iview遇到过许多次类型的问题,典型的就是table组件改row上绑定的值,并不会改变原始数组,让table组件的slot-scope="{ row }"里插的事件几乎失去作用

  • 相关阅读:
    sql分页 sql server,oracle,db2,mysql
    部分SQL优化
    javascript &&和||的其他用法
    socket 套接字
    网络协议篇
    异常处理
    元类type 反射 函数与方法 双下方法
    私有 实例方法 类方法 静态方法 属性 issubclass isinstance区别
    面向对象的三大特性 鸭子类型 类的约束 super的深度剖析
    继承
  • 原文地址:https://www.cnblogs.com/zhujunislucky/p/13924651.html
Copyright © 2011-2022 走看看