vue 侧边导航栏递归显示

import axios from "axios";
import tabs1 from "../tab_content/tab1.vue";
import myTree from "./items.vue";
export default {
  data() {
    return {
      theModel: [],

    };
    props: ["tabs"]
  },

  components: { myTree },
  methods: {
     tabsvalue(data){
      console.log(data)
        this.$emit("get-data",data)
    }
  },
watch: {

},
  created() {

    axios
      .get("../../../static/nav.json")
      // .get("。。。")
      .then(
        function(response) {
          var arr = response.data.dActionList;
          var zNodes = [];
          var farternode = [];
          for (var i in arr) {
            if (arr[i].desktop == "0" && arr[i].parentId != null) {
              farternode.push(arr[i]);
            }
            if (arr[i].parentId && arr[i].desktop == "1") {
              zNodes.push(arr[i]);
            }
          }
          var childNodes = function getChildNodes(
            parentId,
            zNodes,
            nodes,
            child,
            parentItem
          ) {
            if (!parentId || !zNodes) return nodes;
            var childNode = [];
            for (var k in zNodes) {
              if (zNodes[k].parentId == parentId) {
                if (child) {
                  childNode.push(zNodes[k]);
                } else {
                  nodes.push(zNodes[k]);
                }
                childNodes(zNodes[k].id, zNodes, nodes, true, zNodes[k]);
              }
            }
            if (childNode.length > 0 && child) {
              parentItem.children = childNode;
            }
            return nodes;
          };

          for (var j in farternode) {
            farternode[j]["children"] = [];
            var nodes = [];
            nodes = childNodes(farternode[j].id, zNodes, nodes, false, null);
            farternode[j].children = nodes;
          }
          console.log(farternode);
          console.log(nodes);
          this.theModel = farternode;
        }.bind(this)
      )
      .catch(function(error) {
        console.log(error);
      });
    console.log(this.$refs.tabsdata)

  }
};

  父组件 的js

<template>
  <div id="navto">
     <my-tree v-for="menuItem in theModel" :key="menuItem.id" :model="menuItem"  @data-tabsvalue="tabsvalue"></my-tree>
  </div>
</template>

父组件的节点

import tabs from ‘../compont/tabs.vue‘
export default {
  name: ‘treeMenu‘,
  props:["model"],

  data () {
    return {
      folderIcon: ‘folder‘,
      isDynamicFolder: false,
      isOpen: false,
    }
  },
  computed: {
    isFolder () {
      return !!(this.model.children && this.model.children.length)
    }
  },
  watch: {
    isDynamicFolder () {
      this.isOpen = true
      this.folderIcon = ‘folder-open‘
    }
  },
  methods: {
    tabsvalue(data){
      this.$emit("data-tabsvalue",data)
    },
    run(data){

      if(!data.children){
        this.tabsvalue(data)
         console.log(data.text);
          console.log(data.url)
      }
    },
    toggle () {
        this.isOpen = !this.isOpen
        this.folderIcon = this.isOpen ? ‘folder-open‘ : ‘folder‘
    }
  }
}

子组件的js

<template>
   <li>
    <span @click="toggle">
      <i :class="[‘icon‘, (isFolder || isDynamicFolder) ? folderIcon : ‘file-text‘]"></i>
      <span class="mousestyle">{{ model.text}}</span>
    </span>
  <!-- <transition name="mybox" > -->
    <ul v-if="isOpen">
      <span  v-for="item in model.children" :key="item.id" @click.stop="run(item)">
        <tree-menu :model="item" @data-tabsvalue="tabsvalue">
        </tree-menu>
      </span>
    </ul>
 <!-- </transition> -->
  </li>
</template>

子组件的节点

原文地址:https://www.cnblogs.com/duke-peng/p/8550321.html

时间: 2024-10-16 20:40:37

vue 侧边导航栏递归显示的相关文章

【源码分享】jquery+css实现侧边导航栏

jquery+css实现侧边导航栏 最近做项目的时候,突然想用一个侧边导航栏,网上找了几个插件,有的太丑而且不太符合我的预期.与其修改别人的代码,不如自己来写一个了.废话不多说先上图,感兴趣的请继续看下去. 1效果图 当有顶部导航栏的时候侧边导航栏会消失. 响应式方面,同样的顶部导航栏消失后右下角的图标才出现.点击出现导航,选中后消失: 这里是个demo ,没有做平滑滚动,需要的可以自己加上. 大体就介绍这么多吧,下面上代码. 2css代码 这里是css代码,详情请看注释 1 <style>

【AmazeUI】手机版页面的顶部导航条Header与侧边导航栏offCanvas

顶部导航条如果你细心留意下现在的页面,实在是太常见了.这个组件在手机端的页面中,同样可以借助AmazeUI这个前端框架实现.与此同时,可以在导航栏的最右方加一个触发侧边导航栏offCanvas.不要再使用BootStrap那种,一旦点击就大幅度下拉的导航了,反正我个人觉得很蛋疼的.一个导航活活地占据了页面大量位置.这个侧边导航栏offCanvas曾经是php方面的WorkPress的优秀设计来的. 使用AmazeUI做出来的效果如下: 首先是顶部导航栏的代码: <!--这里的顶部导航栏与Boot

基于jQuery右侧弹出侧边导航栏代码

基于jQuery右侧弹出侧边导航栏代码.这是一款点击按钮弹出侧边导航栏样式特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="box-bj"><img src="images/wd011.jpg" /></div> <div id="mintbar"><a id="closebtn" href="#"&g

ecshop导航栏自动显示三级或多级子栏目,多级频道分类,并实现css高亮显示

ecshop导航要达到的目标: 一,比如上图,当我访问三级分类,响应式布局,这个栏目时,最顶级的元件这个分类,要高亮显示 二,如果导航上面有商品或文章频道, 并且他们有子栏目,则全自动显示所有的子栏目. 三,如果这个导航有子分类,则统一显示下拉三角标志. 代码如下 一,在includes/lib_main.php 文件中,修改掉或另外重命名并重定义一个这个get_navigator()函数,修改后的内容如下,另外get_categories_tree()这个函数为系统自带的在lib_goods.

iOS开发-仿大众点评iPad侧边导航栏

昨天其实已经写了一篇侧边栏的文章,不过感觉还不是很清晰,这篇文章算是补充吧,iPad上看了大众点评的侧边栏,基本上百分之九十类似,具体效果可参考下图: 对比昨天主要做了两个修改,一个是图片和文字的显示位置,另外一个就是关于底部的定位和设置的位置在横竖屏时显示的问题,侧边栏的区域是是自己控制的,需要注意一下横竖屏的时候设置一下autoresizingMask,底部图标定位的时候也是一样设置. 导航栏上每个按钮提取出了一个父类GPDockItem,头文件中的代码: // // GPDockItem.

使用bootstrap3.0搭建一个具有自定义风格的侧边导航栏

由于工作变动,新的项目组,可能会涉及到更多的类似于后台管理系统这一类的项目,而且开发可能更加偏向于传统型的开发,希望今后能够在新的项目中能够用得上vuejs吧! 接手项目的时候,就是一个后台管理系统,而且采用了Bootstrap进行搭建,页面大致模型也基本搭建成功了.然后看到页面上有一个侧边栏,之前是他们从别的地方找出来的一个侧边栏,给人的感觉总是差那么点意思.所以重构了一下.具体的效果,请移步bootstrap-sidebar . 其实主要就解决了两个问题: 1.与内容等高,最小高度为一屏的高

jQuery实现侧边导航栏效果

效果图: 以下是完整代码: <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="keywords" content="JS代码,侧边菜单,拉出菜单,高级菜单,导航菜单,jquery菜单" /><met

iOS解决隐藏导航栏后,打开照片选择器后导航栏不显示的问题以及更换导航栏背景色

问题描述: 遇到一种情况,在一个控制器上(隐藏了导航栏),打开照片选择器 UIImagePickerController后,照片选择器头部一片空白,且上滑相册时,信息会有错乱效果. 原因分析: 通过查看层次图,发现导航栏其实有的,那么问题是因为导航栏透明了导致的 解决办法: UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceT

Vue设置导航栏为公共模块并在登录页不显示

1.公共模块的内容可以放在App.vue中但是通常登录页面是不需要导航的,那么就需要规避登录页这时,就可以采用keep-alive结合$route.meta来实现这个功能.keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染.$route.meta则可以选择让需要的页面才展示.修改App.vue,如下: <template> <div id="app"> <div v-if="$route.meta.kee