iview tree checked 问题:子节点选中了,但是父节点没选中


  

  //在树状图所有层级找到 id等于x102的节点。

              let id=“x102”;

              let plot = util.findNode(this.treeData[0], id);
 
              //plot.checked=true; // 树状图点击一下才会显示选中状态。
              //this.$set(plot.checked, true);//报错:属性不存在。
              this.$set(plot,"checked", true); //正确
              console.log('plot',plot.checked); //true
util.findNode = function (tree, id) {
  if (tree.id === id) {
    return tree;
  }

  let stack = [];
  stack.push(tree);
  var tmpNode;
  while (stack.length > 0) {
    tmpNode = stack.pop();
    if (tmpNode.id === id) {
      return tmpNode;
    }
    if (tmpNode.children && tmpNode.children.length > 0) {
      var i = tmpNode.children.length - 1;
      for (i = tmpNode.children.length - 1; i >= 0; i--) {
        stack.push(tmpNode.children[i]);
      }
    }
  }
};

 

拓展知识:

一、修改对象的某个属性:

https://blog.csdn.net/panyang01/article/details/76665448

Vue2.0 $set()的正确使用方式

vue2.0 给data对象新增属性,并触发视图更新

如下代码,给 student对象新增 age 属性

data () { return { student: { name: '', sex: '' } } }

 

众所周知,直接给student赋值操作,虽然可以新增属性,但是不会触发视图更新

mounted () {
    this.student.age = 24 }

 

原因是:受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。

要处理这种情况,我们可以使用$set()方法,既可以新增属性,又可以触发视图更新。

但是,值得注意的是,网上一些资料写的$set()用法存在一些问题,导致在新接触这个方法的时候会走一些弯路!

错误写法:this.$set(key,value)(ps: 可能是vue1.0的写法)

mounted () {
    this.$set(this.student.age, 24) }

 

正确写法:this.$set(this.data,”key”,value’)

mounted () {
    this.$set(this.student,"age", 24) }

 

二、修改数组的某个元素:

https://blog.csdn.net/zsm4623/article/details/88529893

vue中的$set和Vue.set方法

当我们使用vue开发时经常会遇到当vue实例已经创建好了,有时候需要再次给数据赋值时,并不能在视图中改变
在vue文档中写着如果在实例创建之后添加新的属性到实例上,它不会触发视图更新
因此比如我们修改一个数组其中的一个值,或者添加一条数据时,不管用。

<div id="app"> <p v-for="item in items" v-once>{{item}}</p> <button @click="btn()">添加</button> </div> 

 

new Vue({ el:'#app', data:{ items:['a', 'b', 'c'] }, methods:{ btn(){ this.items[1] = 'd' console.log(this.items); } } }) 

 

item
发现修改失败。

Vue.set() 方法
参数1: 要修改的对象
参数2: 属性
参数3: 属性的值是啥
返回值:已经修改好的值

有三种方法可以实现,分别是Vue.set, vm.$set, replace

var vm =new Vue({ el:'#app', data:{ items:['a', 'b', 'c'] }, methods:{ btn(){ Vue.set(this.items, 1, 'e') console.log(this.items) } } }) 

 

Vue.set
发现修改完了。

 var vm =new Vue({ el:'#app', data:{ items:['a', 'b', 'c'] }, methods:{ btn(){ this.$set(this.items, 1, 'e') console.log(this.items) } } })

vm.$set

修改完毕。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM