Vue路由,路由传参,嵌套路由

Vue路由

vue的单页面应用是基于路由组件的,路由用于设定访问路径,并将路径和组件映射起来

路由的基本使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fmrC4CUU-1592221876236)(en-resource://database/632:1)]

第一步:创建组件

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>路由</title>
    <script src="lib/vue-2.4.0.js"></script>
</head>

<body>
    <div id="app">

    </div>

</body>
<script>
    var login = {
        template: "<h2>我是登录组件</h2>"
    }

    var register = {
        template: "<h2>我是注册组件</h2>"
    }

    new Vue({
        el: "#app",
        data: {
            
        }
    })
</script>
</html>

第二步:创建Router

导入:vue-router-3.0.1.js
VueRouter:创建一个VueRouter实例对象
routes:routes中定义了路由的规则
path:表示路由的url
redirect:就是重定向,访问path时,会被重定向到redirect指定的路由
component:表示路由要跳转的组件
router-link:控制组件的切换,内容会被默认渲染成标签
tag:指定router-link被渲染成哪种标签
router-view:相当于一个占位符,当组件进行切换时,该路由会匹配到响应的组件


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>路由</title>
    <script src="./lib/vue-2.4.0.js"></script>
    <script src="./lib/vue-router-3.0.1.js"></script>
</head>
<body>
    <div id="app">
        <router-link to="/login" tag="button">登录</router-link>
        <router-link to="/register">注册</router-link>
        <transition>
            <router-view></router-view>
        </transition>
    </div>
</body>
<script>
    var login = {
        template: "<h2>我是登录组件</h2>"
    }
    var register = {
        template: "<h2>我是注册组件</h2>"
    }
    //创建一个VueRouter实例对象
    let routerObj = new VueRouter({
        routes:[//定义规则
            {path:'/',redirect:'login'},//path:路由的url,redirect:重定向的指定路由
            {path:"/login",component:login},//component:跳转的路径
            {path:"/register",component:register}
        ]
    })
    new Vue({
        el: "#app",
        data: {
            
        },
        router:routerObj
    })
</script>
</html>

第三步:添加动画

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>路由</title>
    <script src="./lib/vue-2.4.0.js"></script>
    <script src="./lib/vue-router-3.0.1.js"></script>
    <style>
        /* v-enter 这是个时间点,是进入之前,元素的起始状态,此时还没有进入 */
        /* v-leave-to 这是个时间点,是动画离开之后,元素的终止状态,此时,元素 动画已经结束了 */
        .component-enter,
        .component-leave-to {
            opacity: 0;
            transform: translateX(50px);
        }

        /* v-enter-active 入场动画的时间段 */
        /* v-leave-active 离场动画的时间段 */
        .component-enter-active,
        .component-leave-active {
            transition: all 0.5s ease;
        }
    </style>

</head>

<body>
    <div id="app">
        <!-- 
		router-link : 控制组件的切换 
		tag : 指定被渲染成那种标签
	-->
        <router-link to="/login" tag="button">登录</router-link>
        <router-link to="/register">注册</router-link>
        <transition name="component" mode="out-in"> <!--name和mode是添加动画必须的-->
            <router-view></router-view>
        </transition>
    </div>

</body>
<script>
    var login = {
        template: "<h2>我是登录组件</h2>"
    }

    var register = {
        template: "<h2>我是注册组件</h2>"
    }

    //创建一个VueRouter实例对象
    let routerObj = new VueRouter({
        routes: [//定义规则
            { path: '/', redirect: 'login' },//path:路由的url,redirect:重定向的指定路由
            { path: "/login", component: login },//component:跳转的路径
            { path: "/register", component: register }
        ]
    })

    new Vue({
        el: "#app",
        data: {

        },
        router: routerObj
    })
</script>

</html>

路由传参

方法一:直接在url路径后面./login?id=xx&name=xx
方法二:使用restful风格:./login/id/name
this.$route:获取路由对象

  • query:适用于?后面拼接的参数
  • params:适用于/
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>路由</title>
    <script src="./lib/vue-2.4.0.js"></script>
    <script src="./lib/vue-router-3.0.1.js"></script>
    <style>
        /* v-enter 这是个时间点,是进入之前,元素的起始状态,此时还没有进入 */
        /* v-leave-to 这是个时间点,是动画离开之后,元素的终止状态,此时,元素 动画已经结束了 */
        .component-enter,
        .component-leave-to {
            opacity: 0;
            transform: translateX(50px);
        }

        /* v-enter-active 入场动画的时间段 */
        /* v-leave-active 离场动画的时间段 */
        .component-enter-active,
        .component-leave-active {
            transition: all 0.5s ease;
        }
    </style>

</head>

<body>
    <div id="app">
        <!-- 
		router-link : 控制组件的切换 
		tag : 指定被渲染成那种标签
	-->
        <router-link to="/login?id=123&name=曹青稳" tag="button">登录</router-link>
        <router-link to="/register/456/周园园">注册</router-link>
        <transition name="component" mode="out-in"> <!--name和mode是添加动画必须的-->
            <router-view></router-view>
        </transition>
    </div>

</body>
<script>
    var login = {
        template: "<h2>我是登录组件{{this.$route.query.id}}-----{{this.$route.query.name}}</h2>"
    }

    var register = {
        template: "<h2>我是注册组件{{this.$route.params.id}}-----{{this.$route.params.name}}</h2>"
    }

    //创建一个VueRouter实例对象
    let routerObj = new VueRouter({
        routes: [//定义规则
            { path: '/', redirect: 'login' },//path:路由的url,redirect:重定向的指定路由
            { path: "/login", component: login },//component:跳转的路径
            { path: "/register/:id/:name", component: register }
        ]
    })

    new Vue({
        el: "#app",
        data: {

        },
        router: routerObj
    })
</script>

</html>

路由嵌套

坑1:
坑2:微信登录

  • 之间要写微信登录
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>路由嵌套</title>
    <script src="./lib/vue-2.4.0.js"></script>
    <script src="./lib/vue-router-3.0.1.js"></script>
    <!--vue-router引用要在Vue引用之后-->
</head>

<body>
    <div id="app">
        <router-link to="/login" tag="button">登录</router-link>
        <transition>
            <router-view></router-view>
        </transition>
    </div>

    <template id="login">
        <div>
            <router-link to="/login/dengweixin">微信登录</router-link>
            <router-link to="/login/dengzhanghao">账号登录</router-link>
            <router-view></router-view>
        </div>
    </template>

</body>


<script>
    var login = {
        template: "#login"
    }

    var weixin = {
        template: "<h2>微信登录</h2>"
    }

    var zhanghao = {
        template: "<h2>账号登录</h2>"
    }

    let routerObj = new VueRouter({
        routes: [
            { path: '/', redirect: '/login' },
            {
                path: '/login',
                component: login,
                // children属性用于指定子路由,通过子路由可以实现路由的嵌套. 
                // 里面定义的内容和外面没有区别
                children: [
                    { path: 'dengweixin', component: weixin },
                    { path: 'dengzhanghao', component: zhanghao }
                ]
            }
        ]
    })
    new Vue({
        el: "#app",
        data: {

        },
        router: routerObj
    })
</script>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值