VueJs无法检测到数组的变化(数组变了没有重新渲染页面)

昨天在使用vue.js的时候遇到了一个非常奇怪的bug,贴出来跟大家分享一下(虽然问题解决了,但还是有点不理解)


       

     

hideChildren(childrenIds,index){
    //递归让该节点的所有子节点隐藏
    if(index!=null&&index!=''&&index!=-1){
        this.trace.spans[index].isShow=true;
        if(childrenIds!=null) {
            this.trace.spans[index].symbol = "+";
        }
    }
    if(childrenIds!=null){
          var spans=this.trace.spans;
          var ids=childrenIds.split(",");
          //首先把所有该子项
          for(var i=0;i<ids.length;i++){
              for(var j=0;j<spans.length;j++){
                  if(ids[i]===spans[j].spanId){
                      spans[j].isShow=false;
                      //children关闭自己的children
                      this.hideChildren(spans[j].children);
                      break;
                  }
              }
          }
          this.trace.spans=spans;
      }
},
showChildren(childrenIds,index){
    //递归让该节点的所有子节点隐藏
    if(index!=null&&index!=''&&index!=-1){
        this.trace.spans[index].symbol = "-";
    }
   if(childrenIds!=null){
        var spans=this.trace.spans;
        var ids=childrenIds.split(",");
        //首先把所有该子项
        for(var i=0;i<ids.length;i++){
            for(var j=0;j<spans.length;j++){
                if(ids[i]===spans[j].spanId){
                    spans[j].isShow=true;
                    break;
                }
            }
        }
       this.trace.spans=spans;
    }
}

     (PS:排版有点丑)

下面讲重点:

    功能:两个函数分别实现关闭和展开树形子节点

    问题:结果很奇怪了:hideChildren()函数执行成功,树形节点隐藏功能正常运行,showChildren()函数执行成功,但是页面上没有任何变化。(要是说vue检测不到 对象的变化,为什么同样的代码一个有效一个没有效呢

    百度了一下:Vuejs的一些总结 第九点。vuejs检测不到直接索引设置元素,如vm.item[0]={};

   通过这样解决了 vm.$set(key,value)

 

showChildren(childrenIds,index){
    //递归让该节点的所有子节点隐藏
    if(index!=null&&index!=''&&index!=-1){
        this.trace.spans[index].symbol = "-";
    }
   if(childrenIds!=null){
        var spans=this.trace.spans;
        var ids=childrenIds.split(",");
        //首先把所有该子项
        for(var i=0;i<ids.length;i++){
            for(var j=0;j<spans.length;j++){
                if(ids[i]===spans[j].spanId){
                    spans[j].isShow=true;
                    break;
                }
            }
        }
       this.trace.spans=spans;
       this.$set('trace',this.trace);
    }
}




问题是解决了,感觉还是听奇葩的,最终得出来一个结论,vuejs的bug吧”,如果哪位小伙伴弄清楚了这其中的原理,请分享!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值