vue2传递个子组件的数据没有更新?
vue"><template> <div>
<div class="left">
<Tree :data="data"></Tree>
</div>
</div>
</template>
<script>
import Tree from '@/components/tree/index.vue'
import {GetOrganiztionalData,GetUserList} from '@/api/detailedList'
export default {
components: {Tree},
data() {
return {
data: []
}
},
props: {
treeUserInfo: Object
},
created() {
this.getOrganizational()
},
methods: {
// 辅助函数:根据部门ID找到对应的部门节点
findDepartmentNode(departmentId, nodes) {
for (const node of nodes) {
if (node.id === departmentId) {
return node;
}
// 如果该节点有子节点,递归查找
if (node.children && node.children.length > 0) {
const foundNode = this.findDepartmentNode(departmentId, node.children);
if (foundNode) {
return foundNode;
}
}
}
return null; // 如果找不到对应的部门节点
},
getOrganizational() {
GetOrganiztionalData({}).then(res => {
if(this.treeUserInfo.erpCode) {
console.log('2222')
this.data = [res.data]
const id = this.treeUserInfo.erpDepCode
this.getUserInfo(id)
} else {
this.data = [res.data]
}
})
},
getUserInfo(id) {
const departmentNode = this.findDepartmentNode(id, this.data)
if(!departmentNode.children) {
this.$set(departmentNode, 'children', [])
}
const obj = {
erpParentCode: id
}
let array = []
GetUserList(obj).then(res => {
res.data.map(item => {
array.push({
text:item.erpName,
erpCode: item.erpCode
})
})
departmentNode.children.push(...array)
})
}
},
}
</script>
这是我写的代码,走console.log('222')的时候,传递给子组件的 data数据没有,应该怎么解决
子组件代码
<template> <div>
<el-tree :data="data" :node-key="data.id" default-expand-all :expand-on-click-node="false" ref="tree" :default-checked-keys="defaultCheckKeys">
<span slot-scope="{node,data}">
<div>
<!-- 没有子级的展开图标 -->
<i v-if="!data.children" class="el-icon-folder" @click.stop="handleExpandClick(node,data)"></i>
<i v-else-if="node.expanded" class="el-icon-folder-opened" @click.stop="handleExpandClick(node,data)"></i>
<i v-else class="el-icon-folder" @click.stop="handleExpandClick(node,data)"></i>
</div>
</span>
</el-tree>
</div>
</template>
<script>
export default {
data() {
return {
defaultCheckKeys: []
}
},
props: {
data: Array,
keys:String
},
methods: {
handleExpandClick(node,data) {
node.expanded = !node.expanded;
}
}
</script>
回答:
this.$set(this, 'data', [res.data])
this.$set(departmentNode, 'children', [...departmentNode.children, ...array])
回答:
在子组件watch一下
props: { data: {
Object,
default: null,
},
},
watch: {
data: {
handler(newVal, oldVal) {
console.log("newVal-----", newVal);
},
immediate: true,
},
},
回答:
应该是传过去了 ...
过 watch 看一下,
<el-tree :data="data" :node-key="data.id"
data 是一个数组,哪来的 data.id ...
<span slot-scope="{node,data}">
感觉你用 data 存数据很勇 ...
可能的原因:
1.el-tree 的渲染和生命周期有关系,后续获取的数据没更新内容 updateForce
2.this.data 存数据太糙了,改 treeData 试试有没有冲突
3.打印一下取到的 res 的内容,getUserInfo 注释掉,感觉想过滤用户,为啥写进参数去查?
以上是 vue2传递个子组件的数据没有更新? 的全部内容, 来源链接: utcz.com/p/934899.html