Vue路由

Vue路由

<script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

创建路由

var route=new VueRouter({
        routes:[
            {path:"/",redirect:"/login"},//改变哈希值
            {path:"/login",component:login},//component的参数是一个组件对象,不能是一个引用名称:'login'
            {path:"/regist",component:regist}
        ]
    })

path表示路径的哈希值

component表示对应path下显示的组件

需要在Vue中注册

重定向

redirect和component不同的是

redirect是直接改变url中的哈希值,而component只是规定在对应的path下应该显示什么组件

new Vue({
        el:"#app",
        router:route,
        components:{
            regist:"regist",
        }
    })

router-view

显示路由中,comonent的容器,没有这个那么无法显示路由中的组件

路由跳转

方式一 router-link

<router-link to="/login">登录</router-link>
    <router-link to="/regist">注册</router-link>

方式二 this.$router.push("/path/params")
使用一个事件实现push跳转

使用query方式传值

可以使用this.$route拿到路由对象

路由对象的query数组对象记录着所有在哈希值后面以?号拼接的参数

所以可以使用this.$route.query.参数名 获取参数的值

<router-link to="/login?id=2">登录</router-link>
 new Vue({
        el:"#app",
        router:route,
        components:{
            regist:"regist",
        },
        created(){   
            alert(this.$route.query.id)
        }
    })
//弹出2

传递多个值

多个值之间用&号拼接

<router-link to="/login?id=2&name=lili">登录</router-link>

alert(this.$route.query.id),
alert(this.$route.query.name)

第一个弹出2
第二个弹出lili

使用params方式传值

在路由的path后面添加参数

var route=new VueRouter({   
            {path:"/regist/:id/:name",component:login},//component的参数是一个组件对象,不能是一个引用名称:'login'
        ]
    })

这时url跟着login的第一个值就是id的值,第二个就是name的值

<router-link to="/regist/2/lili">注册</router-link>

通过this.$route.params.id获取id的值2

通过this.$route.params.name获取name的值lili

children实现路由嵌套

当在一个组件中要实现路由功能时,就需要使用children实现嵌套

在需要嵌套的的routes中添加children

下面示例中登录组件中需要嵌套两个路由,分别时qq登录和邮箱登录

var route=new VueRouter({
        routes:[
            {path:"/",redirect:"/login"},//改变哈希值
            {
                path:"/login",
                component:login,
                children:[
                    {path:"email",component:email},
                    {path:"qq",component:qq}
                ]
            },//component的参数是一个组件对象,不能是一个引用名称:'login'
            {path:"/regist/:id/:name",component:regist}
        ]
    })

并且需要在login组件中设置router-link和router-view

var login= Vue.component('login',{
        template:"#login"})

<template id="login">
    <div>
        <div>登录</div>
        <router-link to="/login/email">邮箱登录</router-link>
        <router-link to="/login/qq">QQ登录</router-link>
        <router-view></router-view>
    </div>
</template>

完整示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-link to="/login?id=2&name=lili">登录</router-link>
    <router-link to="/regist/2/lili">注册</router-link>
    <router-view></router-view>
</div>
<!--嵌套路由-->
<template id="login">
    <div>
        <div>登录</div>
        <router-link to="/login/email">邮箱登录</router-link>
        <router-link to="/login/qq">QQ登录</router-link>
        <router-view></router-view>
    </div>
</template>
</body>
</html>
<script>
    var regist={
        template: "<div>注册</div>"
    }

   var login= Vue.component('login',{
        template:"#login"})
    var email= Vue.component('email',{
        template:"<div>邮箱登录</div>"})
    var qq= Vue.component('qq',{
        template:"<div>QQ登录</div>"})
    var route=new VueRouter({
        routes:[
            {path:"/",redirect:"/login"},//重定向改变哈希值
            {
                path:"/login",
                component:login,
                children:[
                    {path:"email",component:email},
                    {path:"qq",component:qq}
                ]
            },//component的参数是一个组件对象,不能是一个引用名称:'login'
            {path:"/regist/:id/:name",component:regist}
        ]
    })

    new Vue({
        el:"#app",
        router:route,
        components:{
            regist:"regist",
        },
        mounted(){
        }
    })
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值