Vue路由对象

vue路由基础应用

Vue.js 路由允许我们通过不同的 URL 访问不同的组件。
通过 Vue路由对象可以实现多视图的单页Web应用,它和vue一样都需要引入才能使用

比如下面这个例子:在很多网站,比如淘宝,京东登陆界面都是这样

在这里插入图片描述
在之前的学习中,我们使用锚点的方法来实现该功能,但是利用锚点来完成的话,代码的重复利用率较低,所以接下来我们可以利用vue路由切换来实现。

a标签实现

<div id="app">
        <a href="#/password">密码登录</a>
        
        <a href="#/code">验证码登录</a>
        <div style="margin-top: 20px;">
            <router-view></router-view>
             <!-- route-view标签是vue-router提供的元素,它是专门用来当做占位符的  
             将来路由规则匹配到组件的时候会将组件展示到这个router-view 中去 -->
        </div>       
    </div>
    <template id='tem1'>
        <div>
            <input type="text" placeholder='会员名/邮箱/手机号'><br>
            <input type="text" placeholder='请输入密码'>
        </div>
    </template>
    <template id='tem2'>
        <div>
            <input type="text" placeholder='请输入手机号'><br>
            <input type="text" placeholder='请输入验证码'>
        </div>
    </template>
    <script>
        var password = {
            template:'#tem1'
        }
        var code1 = {
            template:'#tem2'
        }
        const router = new VueRouter({
            routes:[
                {path:'/password',component:password},
                {path:'/code',component:code1}
            ]
        })
        new Vue({
            el:'#app',
            components:{
                password,code1
            },
            router:router
        })       
    </script>

使用a标签进行路由跳转时,需要在定义的路径前面加上#,这代表从当前目录进行跟踪,不加的话会跳转到根目录进行检索

在这里插入图片描述
在这里插入图片描述可以看到通过点击,上面的url地址栏中也发生了变化。

router-link

router-link是vue-router中的一个标签,它默认渲染为一个a标签,但是也可以通过tag属性将默认标签改变为其他标签,并且在写跳转路由时不需要手动添加#,它会自动默认添加

<router-link to="/password" tag="h1">密码登录</router-link>
<router-link to="/code">验证码登录</router-link>
            <router-view></router-view>

在这里插入图片描述

改变激活路由的样式

我们可以看到当我们选中一个路由时,会自动给其添加类名router-link-exact-active和router-link-active。这代表着当前属于激活状态。
在这里插入图片描述我们可以给这个类添加属性来改变样式

.router-link-active{
            color:red
        }

在这里插入图片描述

redirect

在nodejs的图书管理系统中,我们学习了redirect重定向,来使执行完添加,修改操作后,自动跳转会主页面。在vue-router中也有这样的方法。在上面的代码中进行添加

        <router-link to="/password">密码登录</router-link>
        <router-link to="/code">验证码登录</router-link>
        <router-link to="/code1">重定向1</router-link>
        <router-link to="">重定向2</router-link>
            <router-view></router-view>
routes:[
                {path:'/password',component:password},
                {path:'/code',component:code1},
                {path:'/code1',redirect:'/password'},
                {path:'/',redirect:'/code'}
            ]

在这里插入图片描述可以看到虽然我们点击的是路径为/code1对应的路由,但地址栏显示的却是/password对应的路由地址。这就说明redirect方法可以把当前路由对应到另一个路由。

在进网站时,应当在网站名后面加上/index.html才算是进入主页面,比如百度,只需要输入网站名就可以进入主页面,该方法就可以实现这个效果
在这里插入图片描述
在这里插入图片描述

路由传递数据

使用/password?id=10传递数据,可以看到通过$route.query来获取路由传递的值

<div id="app">          
        <router-link to="/password?id=10" tag="span">密码登录</router-link>
        <router-link to="/code" tag="span">验证码登录</router-link>
            <router-view></router-view>           
    </div>
    <template id='tem1'>
        <div>
            <h1>我是组件1===={{$route.query}}</h1>
        </div>
    </template>
    <template id='tem2'>
        <div>
            <h1>我是组件2</h1>
        </div>
    </template>
    <script>
        var password = {
            template:'#tem1',
            created() {
                console.log(this.$route);
            },
        }
        var code1 = {
            template:'#tem2'
        }
        const router = new VueRouter({
            routes:[
                {path:'/password',component:password},
                {path:'/code',component:code1},
            ]
        })
        new Vue({
            el:'#app',
            data:{
                flag:false
            },
            components:{
                password,code1
            },
            router:router
        })       
    </script>

在这里插入图片描述
通过/password/12/Danny来传递数据时,可以用$route.params来获取数据

<router-link to="/password/12/Danny" tag="span">密码登录</router-link>
<template id='tem1'>
        <div>
            <h1>我是组件1===={{$route.params}}</h1>
        </div>
    </template>
routes:[
                {path:'/password/:id/:name',component:password},
                {path:'/code',component:code1},
            ]

在这里插入图片描述

路由嵌套

<div id="app">
        <router-link to="/total">total</router-link>
        <router-view></router-view>
    </div>
    <template id='tem'>
        <div>
            <h1>这是total组件</h1>
            <router-link to="/total/login">登录</router-link>
            <router-link to="/total/register">注册</router-link>
            <router-view></router-view>
        </div>
    </template>
    <script>
        var total = {
            template:'#tem'            
        }
        var login={
            template:'<h1>登录的组件显示</h1>'
        }
        var register={
            template:'<h1>注册的组件显示</h1>'
        }
        const routerobj = new VueRouter({
            routes:[
                {
                    path:'/total',
                    component:total,
                    //使用children属性实现子路由,同时子路由path前不要带 / 否则永远以根路由开始请求, 这样不方便我们调用渲染数据
                    children:[
                        {path:'login',component:login},
                        {path:'register',component:register}
                    ]
                    }
            ]
        })
        new Vue({
            el:'#app',
            router:routerobj
        })
    </script>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在父路由中添加children来设置子路由

总结

定义的router和组件一样都要放到vue实例里面才能生效,并且必须要有route-view标签才能把路由规则对应的组件渲染到页面上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值