2020-12-25 11:47发布
是可以实现滴
记得以前用react写过一个递归渲染菜单栏,当时就想过如果用vue如何实现。最近项目又用到了vue,就决定利用闲暇时间研究一下。render函数这种方法就不说了,和react的方法差不多,这里主要写一下vue组件之间的递归调用。
最后效果基本就是一个类似这种的树形结构,当然样式自己可以更改
渲染树的组件,循环父组件传过来的数据,如果有children就在递归调用自身组件name值
父组件只需要传过去数据就可以了,下面的组件引入方式参考vue文档
这个是可以的,我们可以先写一个递归组件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使用这个递归组件:
<div>
<li v-for="item in menu" :key="item.navId">
<a href="">{{item.nav}}a>
<List :list="item.children"/>
div>
import List from './list'
props: ['menu'],
components: {
List
最后在使用父组件:
<Menu :menu="menu" />
这样就可以实现递归调用data里的数据了
{{item.text}} 0" treedata="item.children"> [removed]export default { name: "myTree", props:{ treedata:{ default:function(){ return [] } } }, }
[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') }, }
目前,对于SEO支持比较好的项目方案是采用服务端渲染。所以如果项目有SEO需求,那么比较好的方案是服务端渲染。如果你已经采用了前后分离的单页项目,而你的网站内容不需要AJAX去获取内容和展示内容,那么可以试试 prerender-spa-plugin 这个插件,这个插件是...
引用数据类型数组的元素是对象引用,没有实际的值,需要给它实例。例如date days = new date[5];days[0] = new date(2000,12,3)每一个days都要去分配。而基础类型都有默认初始值。
1.什么是vue生命周期?有什么作用?每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,这给了用户在不同阶段添...
Vue中传值主要分为两部分父子通信1.父传子传递:当子组件在父组件中当做标签使用的时候,通过给子组件绑定一个自定义属性,值为需要传递的数据接收:在子组件内部通过props进行接收接收的方式有2种 一种是数组接收 另一种是对象接收一般情况下我们都使用对象进...
Vue采用数据劫持结合发布者-订阅者模式的方法,通过Object.defineProperty()来劫持各个属性的setter,getter属性,在数据变动话,通知订阅者,触发更新回调函数,重新渲染视图关键要素observer实现对vue各个属性进行监听function observer(obj, vm){ Object...
假如说我页面上有一个按钮,点击之后请求后端接口,然后将后端返回的json做相关处理之后写入vuex的state。现在有两种写法:一种是:请求后端接口这个ajax代码应该是写在按钮的点击事件处理函数中,然后在这个处理函数里面提交mutations还一种是:直接将请求后...
$nextTick是用来知道什么时候domg更新完成的,vue实现响应式并不是数据发生变化后dom立即变化,而是按照一定的策略来进行dom更新。$nextTick是在下一次dom更新循环结束之后执行延迟回调,在修改数据之后使用这个方法,立即更新dom....
Object是引用数据类型,如果不用function 返回,每个组件的data 都是内存的同一个地址,一个数据改变了其他也改变了;javascipt只有函数构成作用域(注意理解作用域,只有函数的{}构成作用域,对象的{}以及 if(){}都不构成作用域),data是一个函数时,每个组件实例都...
浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting 第一步,用HTML分析器,分析HTML元素,构建一颗DOM树(标记化和树构建)。 第二步,用CSS分析器,分析CSS文件和...
vue 是前端的三大框架之一,主要用于构建用户界面的渐进式框架。在开发效率和性能来说都是很大的提升。所以对于学习前端的人员来说,vue这个框架是推荐学习的,因为目前市面上的企业项目都会使用框架开发,学习vue可以提升你对框架的理解,也可以对你面试和工...
图片预加载有哪些好用的插件?
最多设置5个标签!
是可以实现滴
记得以前用react写过一个递归渲染菜单栏,当时就想过如果用vue如何实现。最近项目又用到了vue,就决定利用闲暇时间研究一下。render函数这种方法就不说了,和react的方法差不多,这里主要写一下vue组件之间的递归调用。
最后效果基本就是一个类似这种的树形结构,当然样式自己可以更改
渲染树的组件,循环父组件传过来的数据,如果有children就在递归调用自身组件name值
父组件只需要传过去数据就可以了,下面的组件引入方式参考vue文档
这个是可以的,我们可以先写一个递归组件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里的数据了
渲染树的组件,循环父组件传过来的数据,如果有children就在递归调用自身组件name值
父组件只需要传过去数据就可以了,下面的组件引入方式参考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" />
记得以前用react写过一个递归渲染菜单栏,当时就想过如果用vue如何实现。最近项目又用到了vue,就决定利用闲暇时间研究一下。render函数这种方法就不说了,和react的方法差不多,这里主要写一下vue组件之间的递归调用。
最后效果基本就是一个类似这种的树形结构,当然样式自己可以更改
相关问题推荐
目前,对于SEO支持比较好的项目方案是采用服务端渲染。所以如果项目有SEO需求,那么比较好的方案是服务端渲染。如果你已经采用了前后分离的单页项目,而你的网站内容不需要AJAX去获取内容和展示内容,那么可以试试 prerender-spa-plugin 这个插件,这个插件是...
引用数据类型数组的元素是对象引用,没有实际的值,需要给它实例。例如date days = new date[5];days[0] = new date(2000,12,3)每一个days都要去分配。而基础类型都有默认初始值。
1.什么是vue生命周期?有什么作用?每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,这给了用户在不同阶段添...
Vue中传值主要分为两部分父子通信1.父传子传递:当子组件在父组件中当做标签使用的时候,通过给子组件绑定一个自定义属性,值为需要传递的数据接收:在子组件内部通过props进行接收接收的方式有2种 一种是数组接收 另一种是对象接收一般情况下我们都使用对象进...
Vue采用数据劫持结合发布者-订阅者模式的方法,通过Object.defineProperty()来劫持各个属性的setter,getter属性,在数据变动话,通知订阅者,触发更新回调函数,重新渲染视图关键要素observer实现对vue各个属性进行监听function observer(obj, vm){ Object...
假如说我页面上有一个按钮,点击之后请求后端接口,然后将后端返回的json做相关处理之后写入vuex的state。现在有两种写法:一种是:请求后端接口这个ajax代码应该是写在按钮的点击事件处理函数中,然后在这个处理函数里面提交mutations还一种是:直接将请求后...
$nextTick是用来知道什么时候domg更新完成的,vue实现响应式并不是数据发生变化后dom立即变化,而是按照一定的策略来进行dom更新。$nextTick是在下一次dom更新循环结束之后执行延迟回调,在修改数据之后使用这个方法,立即更新dom....
Object是引用数据类型,如果不用function 返回,每个组件的data 都是内存的同一个地址,一个数据改变了其他也改变了;javascipt只有函数构成作用域(注意理解作用域,只有函数的{}构成作用域,对象的{}以及 if(){}都不构成作用域),data是一个函数时,每个组件实例都...
浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting 第一步,用HTML分析器,分析HTML元素,构建一颗DOM树(标记化和树构建)。 第二步,用CSS分析器,分析CSS文件和...
vue 是前端的三大框架之一,主要用于构建用户界面的渐进式框架。在开发效率和性能来说都是很大的提升。所以对于学习前端的人员来说,vue这个框架是推荐学习的,因为目前市面上的企业项目都会使用框架开发,学习vue可以提升你对框架的理解,也可以对你面试和工...
图片预加载有哪些好用的插件?