数据库设计:

后台PHP输出所有菜单数据(index.php):

<?php
header("Access-Control-Allow-Origin:*");
header("Content-type:text/json;charset=utf-8");
error_reporting(0);
require_once ("database.php");

$sql = "select * from v_menu";
$re = excute_query($sql);
$arr=[];
while ($row = $re -> fetch_assoc()) {
    if($row["isContent"]=="0"){
        $row["isContent"]=false;
    }else{
        $row["isContent"]=true;
    }
    array_push($arr,$row);
}
echo json_encode($arr);
?>

输出结果:

[{"id":"1","name":"\u7f51\u7ad9\u9996\u9875","pId":"-1","isContent":false},

{"id":"2","name":"\u5173\u4e8e\u6211\u4eec","pId":"-1","isContent":true},

{"id":"3","name":"\u516c\u53f8\u7b80\u4ecb","pId":"2","isContent":true},

{"id":"4","name":"\u516c\u53f8\u6587\u5316","pId":"2","isContent":true},

{"id":"5","name":"\u8363\u8a89\u8d44\u8d28","pId":"2","isContent":true},

{"id":"6","name":"\u5b9e\u9a8c\u5ba4\u8ba4\u8bc1","pId":"-1","isContent":true},

{"id":"7","name":"\u5b9e\u9a8c\u5ba4\u5e03\u5c40\u5efa\u7acb","pId":"6","isContent":true},

{"id":"8","name":"\u4eea\u5668\u8bbe\u5907\u9009\u62e9","pId":"6","isContent":true},

......

]

vue文件(将数据转化为树级目录):

new Vue({
            el: "#app",
            data() {
                return {
                    data: [],//查看php文件夹下的menu.json文件
                }
            },
            created() {
                this.getAllList();
            },
            methods: {
                getAllList() {
                    axios
                        .get('http://localhost/PHP/vue.js/vue+.html+axios+php/sjlr/php/index.php')
                        .then(response => {
                            let data1 = response.data;
                            // console.log(data);
                            let tree = [];
                            for (let i = 0; i < data1.length; i++) {
                                //pId为-1的父节点
                                if (data1[i].pId == '-1') {
                                    let obj = data1[i]
                                    obj.list = []
                                    tree.push(obj)
                                    data1.splice(i, 1)
                                    i--
                                }
                            }
                            if (data1.length != 0) {
                                for (let i = 0; i < tree.length; i++) {
                                    for (let j = 0; j < data1.length; j++) {
                                        if (data1[j].pId == tree[i].id) {
                                            let obj = data1[j]
                                            obj.list = []
                                            tree[i].list.push(obj)
                                            data1.splice(j, 1)
                                            j--
                                        }
                                    }
                                }
                            }
                            this.data = tree
                        })
                        .catch(function(error) {
                            // 请求失败处理
                            console.log(error);
                        });
                },
            }
        })

data数据:

........

生成菜单导航:

<el-menu theme="dark" class="el-menu-demo" mode="horizontal" background-color="#1d5daf" text-color="#fff" active-text-color="#0e81ce">
                        <template v-for="(item,index) in data">
                            <el-submenu :index=item.id v-if="item.isContent">
                                <template slot="title">
                                    {{item.name}}
                                </template>
                                <template v-for="(menu,index) in item.list">
                                    <el-menu-item :index=menu.id>{{menu.name}}</el-menu-item>
                                </template>
                            </el-submenu>
                            <el-menu-item :index=item.id v-else>{{item.name}}</el-menu-item>
                        </template>
                    </el-menu>

vue导航菜单调用PHP后台数据的更多相关文章

  1. Vue 使用 axios post请求后台数据时 404

    今天遇到Vue 使用 axios post请求后台数据时 404 使用postman 就能获取到 网上找了大半天 终于找到了解决方法,传送门:https://www.jianshu.com/p/b10 ...

  2. vue+element级联选择器对接后台数据

    1.后台接口返回的数据肯定要和级联选择器的数据一致,所以我专门弄个model存放返回的值,如下:/** * @Auther: GGDong * @Date: 2019/4/3 10:30 */@Get ...

  3. 解决springboot+vue+mybatis中,将后台数据分页显示在前台,并且根据页码自动跳转对应页码信息

    文章目录 先看效果 1.要考虑的问题,对数据进行分页查询 2.前端和后台的交互 先看效果 1.要考虑的问题,对数据进行分页查询 mapper文件这样写 从每次开始查询的位置,到每页展示的条数, < ...

  4. vue 导航菜单默认子路由

    export default new Router({ routes: [ { path: '/', name: 'index', component: index, children: [ { pa ...

  5. vue导航菜单动态展示

    地址:https://blog.csdn.net/qq_31126175/article/details/81875468      

  6. vue如何使用excel导出后台数据

    let params = { // 请求参数 要下载Excel的id 'id':this.excelId }; //导入的接口名 api_excel_exportExcel().then(res =& ...

  7. WordPress导航菜单函数

    导航菜单是每一个WordPress主题必须的元素,如果你要制作一个WordPress主题,那就必须熟悉WordPress导航菜单注册函数 register_nav_menus() 和 导航菜单调用函数 ...

  8. 基于Vue开发的门户网站展示和后台数据管理系统

    基于Vue的前端框架有很多,这几年随着前端技术的官方应用,总有是学不完的前端知识在等着我们,一个人的精力也是有限,不可能一一掌握,不过我们学习很大程度都会靠兴趣驱动,或者目标导向,最终是可以以点破面, ...

  9. vue+element UI递归方式实现多级导航菜单

    介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...

随机推荐

  1. 10_Hive自定义函数UDF

    Hive官方的UDF手册地址是:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1.使用内置函数的快捷方法: 创 ...

  2. tsung报告中Transactions Statistics缺失问题

    长时间没有做性能测试,最近在使用tsung进行性能测试时,修改tsung自带的范例脚本后,运行查看结果时,发现测试报告中transactions  statistics缺失,刚开始一直以为是监控中的配 ...

  3. Codeforces Round #586 (Div. 1 + Div. 2) A. Cards

    链接: https://codeforces.com/contest/1220/problem/A 题意: When Serezha was three years old, he was given ...

  4. springboot2.0入门(五)--swagger2接口API构建

    一.特点 代码变,文档变.只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性. 跨语言性,支持 40 多种语言. Swagger UI 呈现出来的是一份可 ...

  5. EXE中释放DLL中分配的内存

    在DLL中分配的内存,如果到其调用者中释放,可能会出现CRASH的情况,其原因在于: 在DLL中的Code Generation如果是采用了MT(静态加载LIBCRTD.LIB)在该库中维护了一个al ...

  6. 桥接模式(Bridge)---结构型

    1 基础知识 定义:将抽象部分与它的具体实现部分分离,使得它们都可以独立变化.特征:通过组合的方式建立两个之间的联系而不是继承. 使用场景:抽象和具体实现之间增加更多的灵活性:一个类存在两个(多个)独 ...

  7. trigger(type,[data]) 在每一个匹配的元素上触发某类事件。

    trigger(type,[data]) 概述 在每一个匹配的元素上触发某类事件.大理石平台价格表 这个函数也会导致浏览器同名的默认行为的执行.比如,如果用trigger()触发一个'submit', ...

  8. Java进阶知识10 Hibernate一对多_多对一双向关联(Annotation+XML实现)

    本文知识点(目录): 1.Annotation 注解版(只是测试建表)    2.XML版 的实现(只是测试建表)    3.附录(Annotation 注解版CRUD操作)[注解版有个问题:插入值时 ...

  9. Java进阶知识09 Hibernate一对多单向关联(Annotation+XML实现)

    1.Annotation 注解版 1.1.在一的一方加Set 1.2.创建Customer类和Order类 package com.shore.model; import java.util.Hash ...

  10. loj541

    七曜圣贤 sol:我标算还没写过,似乎分块就可以过(因为数据是随机的),我写个set可以有70~80分 //C++ #include<bits/stdc++.h> using namesp ...