vue中路由相关的知识

使用路由的具体步骤

使用路由首先第一步要从插件中导入vueRouter

import VueRouter from 'vue-router';

然后去配置其中的routes

再导出router,在入口文件中导入router,然后use(router)

路由模式有两种:hash,history

hash模式:

优点:兼容性好,几乎可以在任何环境下使用,不需要其他服务器配置

               变化可以在url上看出,支持前进后退

缺点:不好看,有碍美观,搜索引擎对hash不太好

history模式:

优点:美观,对搜索引擎更加友好

缺点:服务器需要对所有路由都适应,一般需要后端路由进行配置

               变化不能够在URl上看出

            不能前进后退,需要借助api封装才能去实现

路由传参有两种:query,pramas

query传参:

1,直接传参

 <router-link to="/home/ikun1?id=12343&&name=zhangsan">Ikun1</router-link>

2,对象写法

<router-link :to="

        {

            path:'/home/ikun1',

            // 简化路由跳转,使用路由命名

            // name:'IkunFirst',

            id:1234,

            name:'zhangsan'

        }">Ikun1</router-link>

pramas传参:

<router-link :to="{

            name:'ikun2',

            // parms对象写法不能再有path,只能用命名法跳转

            parmas:{

                id:1234,

                name:lisi

            }

        }">Ikun2</router-link>

query传参子组件接受的两种方式:query:$router.query.name      pramas:$router.pramas.name

可以在路由routes中配置简化接受传参利用props

第一种写法:但是这种只可以接受params传过来的数据

                    props:true,

第2种写法:这种可以接受params和query传过来的数据

                    props($router) {

                        return {

                            id: $router.query.id,

                            name: $router.query.name

                        }

                    },

路由有几个路由守卫

全局前置路由守卫:

router.beforEach((to, from, next) => {

    if (to.meta.isAuth) {

        if (localStorage.getItem("token") == "ikun1") {

            next()

        }

    } else {

        next()

    }

})

全局后置路由守卫:

独享守卫也是在routes中配置,只对独个组件发挥作用

beforEnter: (to, from, next) => {

                        alert("颠覆迎来虚伪的拥护,黄昏见证真正的信徒");

                    }

组件中还有两个守卫

beforeRouterEnter(){

    console.log('通过路由规则进入组件时调用');

   },

   beforRouterleave(){

    console.log('通过路由规则离开组件时调用');

   }

此外还有两个生命周期函数,为路由专享

activated(){

   },

   deactivated(){

   },

路由跳转有两种方式:声明式导航,编程式导航

声明式:<router-link to="/home/ikun1">Ikun1</router-link>

编程式:<router-link @click="goikun2">ikun2</router-link>

$router.go()    $router.back()     $router.forward()

        

goikun2(){

        this.$router.push(

            {

                name:'ikun2',

                pramas:{

                    id:1234,

                    name:lisi

                }

            }

        )

    }

路由性能提升

路由懒加载:components: () => ('../pages/IkunFirst'),

路由缓存:

<keep-alive :include="['IkunFirst']">

            <ruoter-view></ruoter-view>

        </keep-alive>

路由预加载:将需要用的路由提前放置后台进行加载

代码分割:将不同模块的路由组件分割成独立的文件,而不是用到那个组件进行全部加载。

路由配置代码

// 从插件中引入vuerouter

import VueRouter from 'vue-router';

// 配置路由相关信息

const routes = [{

            // 根组件路由重定向

            Path: "/",

            redirect: "/home",

        },

        {

            Path: '/home',

            name: 'Home',

            // 路由懒加载,优化性能,但是首次加载会比较慢,一般适用于大型复杂组件

            components: () => ('../components/Home'),

            // Home组件下的子路由组件配置

            children: [{

                    Path: 'ikun1',

                    name: "IkunFirst",

                    components: () => ('../pages/IkunFirst'),

                    // 自定义属性配置

                    meta: {

                        // 鉴权属性布尔值判定

                        isAuth: true,

                    },

                    beforEnter: (to, from, next) => {

                        alert("颠覆迎来虚伪的拥护,黄昏见证真正的信徒");

                    }

                },

                {

                    Path: 'ikun2',

                    // Path:'ikun2/:id/:name',

                    name: "IkunSecond",

                    components: () => ('../pages/IkunSecond'),

                    // 第一种写法:但是这种只可以接受params传过来的数据

                    // props:true,

                    // 第2种写法:这种可以接受params和query传过来的数据

                    props($router) {

                        return {

                            id: $router.query.id,

                            name: $router.query.name

                        }

                    },

                    meta: {

                        isAuth: true,

                    }

                }

            ]

        },

        {

            Path: "/about",

            name: 'About',

            components: () => ("../components/About")

        },

    ]

    // 全局前置路由守卫

router.beforEach((to, from, next) => {

    if (to.meta.isAuth) {

        if (localStorage.getItem("token") == "ikun1") {

            next()

        }

    } else {

        next()

    }

})

// 配置路由实例

const router = VueRouter({

    // 历史模式

    mode: 'history',

    routes

})

export default router

部分组件代码

<template>

    <div>

        <router-link to="/home/ikun1">Ikun1</router-link>

        <router-link to="/home/ikun1?id=12343&&name=zhangsan">Ikun1</router-link>

        <!-- 子组件接受参数

        $router.query.id -->

        <router-link :to="

        {

            path:'/home/ikun1',

            // 简化路由跳转,使用路由命名

            // name:'IkunFirst',

            id:1234,

            name:'zhangsan'

        }">Ikun1</router-link>

        <router-link replace to="/home/ikun2/id/name">Ikun2</router-link>

        <router-link :to="{

            name:'ikun2',

            // parms对象写法不能再有path,只能用命名法跳转

            parmas:{

                id:1234,

                name:lisi

            }

        }">Ikun2</router-link>

        <!-- 子组件接受参数

        $router.parms.id -->

        <router-link @click="goikun2">ikun2</router-link>

        <!-- 缓存路由组件IkunFirst -->

        <keep-alive :include="['IkunFirst']">

            <ruoter-view></ruoter-view>

        </keep-alive>

    </div>

</template>

<script>

export default {

   name:'Ikun',

   methods:{

    goikun2(){

        this.$router.push(

            {

                name:'ikun2',

                pramas:{

                    id:1234,

                    name:lisi

                }

            }

        )

    }

   },

   beforeRouterEnter(){

    console.log('通过路由规则进入组件时调用');

   },

   beforRouterleave(){

    console.log('通过路由规则离开组件时调用');

   }

}

</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值