国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vue 動態添加路由及生成菜單

Java3y / 1133人閱讀

摘要:更多文章寫后臺管理系統,估計有不少人遇過這樣的需求根據后臺數據動態添加路由和菜單。先看一下官方介紹動態添加更多的路由規則。

更多文章

寫后臺管理系統,估計有不少人遇過這樣的需求:根據后臺數據動態添加路由和菜單。

為什么這么做呢?因為不同的用戶有不同的權限,能訪問的頁面是不一樣的。

在網上找了好多資料,終于想到了解決辦法。

動態生成路由

利用 vue-router 的 addRoutes 方法可以動態添加路由。

先看一下官方介紹:

router.addRoutes

router.addRoutes(routes: Array)

動態添加更多的路由規則。參數必須是一個符合 routes 選項要求的數組。

舉個例子:

const router = new Router({
    routes: [
        {
            path: "/login",
            name: "login",
            component: () => import("../components/Login.vue")
        },
        {path: "/", redirect: "/home"},
    ]   
})

上面的代碼和下面的代碼效果是一樣的

const router = new Router({
    routes: [
        {path: "/", redirect: "/home"},
    ]   
})

router.addRoutes([
    {
        path: "/login",
        name: "login",
        component: () => import("../components/Login.vue")
    }
])

在動態添加路由的過程中,如果有 404 頁面,一定要放在最后添加,否則在登陸的時候添加完頁面會重定向到 404 頁面。

類似于這樣,這種規則一定要最后添加。

{path: "*", redirect: "/404"}
動態生成菜單

假設后臺返回來的數據長這樣

// 左側菜單欄數據
menuItems: [
    {
        name: "home", // 要跳轉的路由名稱 不是路徑
        size: 18, // icon大小
        type: "md-home", // icon類型
        text: "主頁" // 文本內容
    },
    {
        text: "二級菜單",
        type: "ios-paper",
        children: [
            {
                type: "ios-grid",
                name: "t1",
                text: "表格"
            },
            {
                text: "三級菜單",
                type: "ios-paper",
                children: [
                    {
                        type: "ios-notifications-outline",
                        name: "msg",
                        text: "查看消息"
                    },
                    {
                        type: "md-lock",
                        name: "password",
                        text: "修改密碼"
                    },
                    {
                        type: "md-person",
                        name: "userinfo",
                        text: "基本資料",
                    }
                ]
            }
        ]
    }
]

來看看怎么將它轉化為菜單欄,我在這里使用了 iview 的組件,不用重復造輪子。



    
    
{{threeItem.text}} {{subItem.text}}
{{item.text}}

代碼不用看得太仔細,理解原理即可,其實就是通過三次 v-for 不停的對子數組進行循環,生成三級菜單。

動態菜單這樣就可以實現了。

動態路由,因為上面已經說過了用 addRoutes 來實現,現在看看具體怎么做。

首先,要把項目所有的頁面路由都列出來,再用后臺返回來的數據動態匹配,能匹配上的就把路由加上,不能匹配上的就不加。
最后把這個新生成的路由數據用 addRoutes 添加到路由表里。

const asyncRoutes = {
    "home": {
        path: "home",
        name: "home",
        component: () => import("../views/Home.vue")
    },
    "t1": {
        path: "t1",
        name: "t1",
        component: () => import("../views/T1.vue")
    },
    "password": {
        path: "password",
        name: "password",
        component: () => import("../views/Password.vue")
    },
    "msg": {
        path: "msg",
        name: "msg",
        component: () => import("../views/Msg.vue")
    },
    "userinfo": {
        path: "userinfo",
        name: "userinfo",
        component: () => import("../views/UserInfo.vue")
    }
}

// 傳入后臺數據 生成路由表
menusToRoutes(menusData)

// 將菜單信息轉成對應的路由信息 動態添加
function menusToRoutes(data) {
    const result = []
    const children = []

    result.push({
        path: "/",
        component: () => import("../components/Index.vue"),
        children,
    })

    data.forEach(item => {
        generateRoutes(children, item)
    })

    children.push({
        path: "error",
        name: "error",
        component: () => import("../components/Error.vue")
    })

    // 最后添加404頁面 否則會在登陸成功后跳到404頁面
    result.push(
        {path: "*", redirect: "/error"},
    )

    return result
}

function generateRoutes(children, item) {
    if (item.name) {
        children.push(asyncRoutes[item.name])
    } else if (item.children) {
        item.children.forEach(e => {
            generateRoutes(children, e)
        })
    }
}

所有的代碼實現,我都放在 github 上,動態菜單的實現放在這個項目下的 src/components/Index.vuesrc/permission.jssrc/utils/index.js

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104846.html

相關文章

  • vue keep-alive實現動態緩存以緩存銷毀

    摘要:實現動態緩存以及緩存銷毀需求來源及描述后臺管理系統中,左側為功能菜單欄,點擊菜單列表,右側顯示該菜單的功能頁面,本來是一個非常簡單的后臺管理系統布局,現在增加了菜單按鈕點擊左側菜單欄時,右側頁面頭部顯示當前的頁面標題,形成一個列表,點擊可 vue keep-alive實現動態緩存以及緩存銷毀 需求來源及描述 后臺管理系統中,左側為功能菜單欄,點擊菜單列表,右側顯示該菜單的功能頁面,本來...

    littleGrow 評論0 收藏0
  • vue輕量級后臺管理系統基礎模板

    摘要:具體實現請查看和的退出登陸回調方法。現在除了必要的頁面需要在一開始添加到路由表里,其他的頁面都可以根據后臺數據來自動生成。另外,如果在未登陸時要訪問某一指定頁面,會重定向到登陸頁,登陸成功后會自動跳到這個指定頁面。 項目地址 vue-admin-template 在線預覽 更新 2019.6.25 更新 修復路由表沖突問題 退出當前用戶,換賬號重新登陸時,上個賬號和現在的賬號路由表會有...

    2shou 評論0 收藏0
  • vue權限管理系統

    摘要:權限系統后臺管理系統一般都會有權限模塊,用來控制用戶能訪問哪些頁面和哪些數據接口。大多數管理系統的頁面都長這樣。表為角色權限關聯表,一個角色擁有哪些權限是通過這張表查出來的。這樣就是一個賬號角色權限的關系。 vue權限系統 后臺管理系統一般都會有權限模塊,用來控制用戶能訪問哪些頁面和哪些數據接口。大多數管理系統的頁面都長這樣。 showImg(https://segmentfault...

    bovenson 評論0 收藏0
  • Vue 頁面權限控制和登陸驗證

    摘要:如果一個頁面,有角色越權訪問,這時就得做出限制了。我們可以通過或來實現,下面用代碼來展示一下如何用控制登陸驗證。 更多文章 頁面權限控制 頁面權限控制是什么意思呢? 就是一個網站有不同的角色,比如管理員和普通用戶,要求不同的角色能訪問的頁面是不一樣的。如果一個頁面,有角色越權訪問,這時就得做出限制了。 Vue 動態添加路由及生成菜單這是我寫過的一篇文章,通過動態添加路由和菜單來做控制,...

    lastSeries 評論0 收藏0

發表評論

0條評論

Java3y

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<