Vue.js】vue的data()中的值能否递归调用,怎么实现

2020-12-25 11:47发布

7条回答
HARPPRTのIT
2楼 · 2020-12-25 15:53

是可以实现滴

Kindery
3楼 · 2020-12-25 16:46

记得以前用react写过一个递归渲染菜单栏,当时就想过如果用vue如何实现。最近项目又用到了vue,就决定利用闲暇时间研究一下。render函数这种方法就不说了,和react的方法差不多,这里主要写一下vue组件之间的递归调用。

最后效果基本就是一个类似这种的树形结构,当然样式自己可以更改



渲染树的组件,循环父组件传过来的数据,如果有children就在递归调用自身组件name值

父组件只需要传过去数据就可以了,下面的组件引入方式参考vue文档


侯建平
4楼 · 2020-12-25 19:10

这个是可以的,我们可以先写一个递归组件list.vue,例如:

<template>

    <ul>

        <li v-for="child in list" :key="child.navId">

            <a href="">{{child.nav}}a>

            <Lists :list="child.children"/>

        li>

    ul>

template>


<script>

    export default {

        props: ['list'],

        name: 'Lists'

    }

script>

然后再父组件中menu.vue使用这个递归组件:

<template>

    <div>

        <ul>

            <li v-for="item in menu" :key="item.navId">

                <a href="">{{item.nav}}a>

                <List :list="item.children"/>

            li>

        ul>

    div>

template>


<script>

    import List from './list'


    export default {

        props: ['menu'],

        components: {

            List

        }

    }

script>


最后在使用父组件:

<Menu :menu="menu" />


这样就可以实现递归调用data里的数据了

灰机带翅膀
5楼 · 2020-12-26 17:46

渲染树的组件,循环父组件传过来的数据,如果有children就在递归调用自身组件name值



[removed]export default {  name: "myTree",
  props:{
    treedata:{      default:function(){        return []
      }
    }
  },
}

父组件只需要传过去数据就可以了,下面的组件引入方式参考vue文档



[removed]export default {
  name: "zp",
  data() {    return {
      treeData:[
        {text:1,children:[
          {text:2,children:[{text:5},{text:'55'}]},
          {text:3},
          {text:4},
        ]}
      ]
    };
  },
  components: {
    linTree: () => import('./components/treeContents')
  },
}


小小123
6楼 · 2020-12-27 17:08

<template>

    <ul>

        <li v-for="child in list" :key="child.navId">

            <a href="">{{child.nav}}a>

            <Lists :list="child.children"/>

        li>

    ul>

template>

<script>

    export default {

        props: ['list'],

        name: 'Lists'

    }

script>

然后再父组件中menu.vue使用这个递归组件:

<template>

    <div>

        <ul>

            <li v-for="item in menu" :key="item.navId">

                <a href="">{{item.nav}}a>

                <List :list="item.children"/>

            li>

        ul>

    div>

template>


<script>

    import List from './list'


    export default {

        props: ['menu'],

        components: {

            List

        }

    }

script>

最后在使用父组件:

<Menu :menu="menu" />


布啦啦
7楼 · 2020-12-29 10:58

记得以前用react写过一个递归渲染菜单栏,当时就想过如果用vue如何实现。最近项目又用到了vue,就决定利用闲暇时间研究一下。render函数这种方法就不说了,和react的方法差不多,这里主要写一下vue组件之间的递归调用。

最后效果基本就是一个类似这种的树形结构,当然样式自己可以更改


相关问题推荐

  • 回答 13

    目前,对于SEO支持比较好的项目方案是采用服务端渲染。所以如果项目有SEO需求,那么比较好的方案是服务端渲染。如果你已经采用了前后分离的单页项目,而你的网站内容不需要AJAX去获取内容和展示内容,那么可以试试 prerender-spa-plugin 这个插件,这个插件是...

  • 回答 3

    引用数据类型数组的元素是对象引用,没有实际的值,需要给它实例。例如date days = new date[5];days[0]  = new date(2000,12,3)每一个days都要去分配。而基础类型都有默认初始值。

  • 回答 9

    1.什么是vue生命周期?有什么作用?每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,这给了用户在不同阶段添...

  • 回答 4

    Vue中传值主要分为两部分父子通信1.父传子传递:当子组件在父组件中当做标签使用的时候,通过给子组件绑定一个自定义属性,值为需要传递的数据接收:在子组件内部通过props进行接收接收的方式有2种 一种是数组接收 另一种是对象接收一般情况下我们都使用对象进...

  • 回答 8

    Vue采用数据劫持结合发布者-订阅者模式的方法,通过Object.defineProperty()来劫持各个属性的setter,getter属性,在数据变动话,通知订阅者,触发更新回调函数,重新渲染视图关键要素observer实现对vue各个属性进行监听function observer(obj, vm){ Object...

  • 回答 1

    假如说我页面上有一个按钮,点击之后请求后端接口,然后将后端返回的json做相关处理之后写入vuex的state。现在有两种写法:一种是:请求后端接口这个ajax代码应该是写在按钮的点击事件处理函数中,然后在这个处理函数里面提交mutations还一种是:直接将请求后...

  • $nextTick是什么?Vue.js 2020-07-15 16:21
    回答 1

    $nextTick是用来知道什么时候domg更新完成的,vue实现响应式并不是数据发生变化后dom立即变化,而是按照一定的策略来进行dom更新。$nextTick是在下一次dom更新循环结束之后执行延迟回调,在修改数据之后使用这个方法,立即更新dom....

  • 回答 2

    Object是引用数据类型,如果不用function 返回,每个组件的data 都是内存的同一个地址,一个数据改变了其他也改变了;javascipt只有函数构成作用域(注意理解作用域,只有函数的{}构成作用域,对象的{}以及 if(){}都不构成作用域),data是一个函数时,每个组件实例都...

  • Vue虚拟domVue.js 2020-06-19 15:15
    回答 5

        浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting    第一步,用HTML分析器,分析HTML元素,构建一颗DOM树(标记化和树构建)。    第二步,用CSS分析器,分析CSS文件和...

  • 回答 6
    已采纳

    vue 是前端的三大框架之一,主要用于构建用户界面的渐进式框架。在开发效率和性能来说都是很大的提升。所以对于学习前端的人员来说,vue这个框架是推荐学习的,因为目前市面上的企业项目都会使用框架开发,学习vue可以提升你对框架的理解,也可以对你面试和工...

  • vue 2.0如何搭建Vue.js 2020-04-02 14:33
    回答 3

    图片预加载有哪些好用的插件?

没有解决我的问题,去提问