求助各位大佬,有没有遇到过类似场景,组件递归调用本身,事件传递的问题,help~
描述一下
实现效果如下,是一个树形结构
代码如下,这个树形子组件
<template>
<div class="card">
<ul>
<li v-for="(item,index) in treeData" :key="index">
<div class="item" :class="{ 'line-left': index !== 0, 'line-right': index != treeData.length - 1 }">
<div
class="item-name"
:class="{ 'line-bottom': item.child && item.child.length > 0, 'line-top': !treeFirst }"
>
<div v-if="!treeFirst" class="reduce" @click="delChild(index)">-</div>
<div>{{ item.name }}</div>
<div class="plus" @click="addChild(index)">+</div>
</div>
</div>
<tree-item v-if="item.child && item.child.length > 0"
:tree-data="item.child" />
</li>
</ul>
</div>
</template>
调用这个子组件的父组件如下,代码
<template>
<div class="tree">
<div class="tree-content">
<tree-item :tree-data="treeData" :tree-first="true" />
</div>
</div>
</template>
<script>
import TreeItem from './components/TreeItem'
export default {
name: 'Tree',
components: {
TreeItem
},
data() {
return {
msg:'',
treeData:
[{
name: '主活动',
child: [
{
name: '二级活动1',
。。。。。。。。。。。。
问题场景:
由于子组件内部递归调用,生成的这个树形,当我想点击某个节点时,进行 【子传父】传值,如何传递呢
这个树形的生成是这样的,如下
这时候,我想在每个节点上,加一个点击事件(加在了class 为item-name的div标签上),并在这个事件中$emit抛出一个事件,在父组件中接收,然后获取传递来的参数
因为是组件本身递归调用本身,传递数据就出现了问题,
求助各位大佬,有没有遇到过类似场景,组件递归调用本身,事件传递的问题,help~
正常vue事件触发即可,点击你的
div.plus
的时候,正常调用$emit把事件暴露上去即可,然后在tree-item
上接收。你不要把整颗树想那么复杂,你就把
tree-item
当成普通组件用就可以了,只不过,在你当前的组件里$emit个什么事件出来,你就可以在tree-item
上接收个什么事件