vue递归组件如何传递事件,vue递归菜单

  vue递归组件如何传递事件,vue递归菜单

  本文主要介绍vue递归组件的简单使用示例,帮助您更好地理解和使用vue框架。感兴趣的朋友可以了解一下。

  

前言

  相信很多同学对递归都很熟悉。我们经常用递归来解决算法中的问题。比如classic:从一个所有数字的数组中找出加性能量等于目标数的组合。这个想法也不难。循环数组值递归相加,直到满足目标数条件。虽然递归可以解决大部分问题,但缺点是容易写出无限循环代码,导致栈爆炸。递归在vue组件中的应用在我的实际业务场景中有描述。

  

在vue中使用

  要完成一个完整的递归,我个人认为最重要的有两点:

  确定进入递归的条件;

  确定跳出递归的条件;

  最重要的是确定什么时候跳出递归。递归组件其实很简单,就是在组件A中再次调用组件A,形成一个递归。以下面我遇到的业务为例。某天收到一个需求,需要根据标签条件的不同组合,从一堆用户中筛选出目标用户。因此,有如下设计图纸:

  乍一看,你可能会目瞪口呆,但其实仔细分析,不难发现。看图片,很多同学会觉得有点像我们常说的娃娃,一层一层的。对于这种图,我们首先分析最小单位是哪一个。很容易看出最小的就是上图中的这个。图中的大结构基本上都是由这一小块组成的。只要先实现这一块,剩下的无非就是递归逐层渲染数据。

  接下来无非就是判断数据结构。如果没有子树,就直接渲染项目。如果一个项包含一个子树,则需要重新呈现组件并传递子数据。所以想法其实很简单。假设我们的数据结构如下:

  {

  类型:或,

  值列表:[

  {

  条件:“过去7天的登录次数”,

  登录:!=,

  价值:45英镑

  },

  {

  条件:“过去7天的登录次数”,

  登录:!=,

  价值:45英镑

  },

  {

  键入:“和”

  值列表:[

  {

  条件:“过去7天的登录次数”,

  登录:!=,

  价值:45英镑

  }

  ]

  }

  ]

  }

  上面的数据结构非常清晰,可以看出当数组中的子项包含valueList时,表示需要重新渲染上图中提到的一个小组件。因此,我们可以简单地编码如下(以下代码仍有优化空间):

  模板

  div class=标签列表

  El-tag type= primary size= mini class= logic { { typedic[treedata . type]} }/El-tag

  treedata.valueList中的模板v-for=(item,index

  ul v-if=!item . hasownproperty( value list ):key= rule _ index

  Li { { item . condition } } { { item . logic } } { { item . value } }/Li

  /ul

  /模板

  treedata.valueList中的模板v-for=(item,index

  !-这里判断有valuelist,所以再次调用渲染组件渲染子项-

  label-shows-view v-if= item . hasownproperty( value list ):key= tree _ index :treedata= item /label-shows-view

  /模板

  /div

  /模板

  脚本

  const _TYPE={

  和:和,

  或:或

  }

  导出默认值{

  名称:标签显示视图,

  道具:{

  treedata: {

  类型:对象,

  必填:真

  }

  },

  data() {

  返回{

  typedic:_ TYPE

  }

  }

  }

  /脚本

  不难看出,主要是分析找出数据结构中的重复部分,并逐层渲染。其实很好理解,上面的例子是纯粹的展示。如果有数据交互,就需要格外注意。如果递归层次较深,事件传输、数据更改等。需要小心处理。比如,当笔者做完上面的视觉配置,筛选客户群时,就遇到了下图:

  您可以添加和删除子项,也可以拖放每个组来调整其位置。这时候可以用一个类似气泡的方法,子组件触发事件,接受事件。例如,删除某一组条件时,需要通知父组件要删除哪一项子数据,如下所示:

  !- labelRulesView.vue -

  !-这个自定义组件就是这个组件,也就是递归组件-

  label-rules-view v-if= item . hasownproperty( value list ):label-list= label list :treedata= item :current-index= index @ del group= fundel group /label-rules-view

  !-该组件侦听delGroup事件-

  El-button size= mini type= danger icon= El-icon-delete class= operate-BTN @ click= handleDelNewGroup(current index)/El-button

  //删除一个组

  handleDelNewGroup(索引){

  这个。$emit(delGroup ,index) //将事件触发到上层组件

  },

  基金组(指数){

  this . treedata . value list . splice(index,1)

  },

  在递归组件中,该组件通常同时充当子组件和父组件。因此,需要控制数据之间的交互,否则,很容易出现数据混乱。

  

小结

  本文是作者在实际业务场景中撰写的。通过使用递归组件,我们甚至可以完成一些复杂的图形显示。希望能帮你拓宽思路。如果我能帮到你,请小心(下次拒绝确定[doge])

  以上是vue递归组件的简单使用实例的详细说明。更多关于vue递归组件的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: