Vue-路由

什么是路由

1.**后端路由:**对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;

2.**前端路由:**对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面专挑主要用hash实现;

3.在页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);

在vue 中使用 vue-router

1.导入vue-router 组件类库:

 <script src="../js/vue.js"></script>
 <script src="../js/vue-router.js"></script>   <!-- 它依赖于vue.js -->

2.创建一个路由对象,当导入vue-router 包之后,在 window 全局对象中,就有了一个路由的构造函数,叫做 VueRouter ,在 new 路由对象的时候,可以为构造函数,传递一个配置对象

 var routerObj = new VueRouter({ })

3.routes 这个配置对象中的 routes 表示 【路由匹配规则】 的意思

每个路由规则,都是一个对象,这个规则对象身上,有两个必须的属性。

属性1:path ,表示监听哪个路由链接地址

属性2:component,表示如果路由是前面匹配到的 path,则展示 component 属性对应的那个组件

注意:component的属性值,必须是一个组件的模板对象,不能是组件的引用名称;

  //组件的模板对象
        var login = {
            template: '<h1>登录组件</h1>'
        }

        var register = {
            template: '<h1>注册组件</h1>'
        }


var routerObj = new VueRouter({
            routes: [ 
                //{path: '/',component: login},  不推荐使用
                {
                    path: '/',
                    redirect: '/login' 
                }, {
                    path: '/login',
                    component: login
                }, {
                    path: '/register',
                    component: register
                }
            ]
        })

4.将路由规则对象,注册到 VM 实例上,用来监听 URL 地址的变化,然后展示对应的组件

  var vm = new Vue({
            el: '#app',
            data: {},
            methods: {},
            router: routerObj 
        })

5.渲染组件

router-view:这是 vue-router 提供的元素,专门用来当作占位符的,将来路由规则匹配到的组件就会展示到这个 router-view 中去;所以,我们可以把 router-view 认为是一个占位符

<transition mode="out-in">
            <router-view></router-view>
</transition>

使用tag属性指定router-link渲染的标签类型

<!-- <a href="#/login">登录</a>
        <a href="#/register">注册</a> -->
        <!-- router-link 默认渲染为一个 a 标签  -->
        <!-- 如果想把 router-link 渲染为一个 span 标签:<router-link to="/login" tag="span">登录</router-link> -->
        <router-link to="/login">登录</router-link>
        <router-link to="/register">注册</router-link>

设置路由重定向

路由重定向是通过 redirect 实现,这里的redirect和 Node(302重定向) 中的 redirect (修改地址中的hash值) 完全是两码事

 var routerObj = new VueRouter({
            routes: [ 
                {
                    path: '/',
                    redirect: '/login' 
                }, {
                    path: '/login',
                    component: login
                }, {
                    path: '/register',
                    component: register
                }
            ],
            linkActiveClass: 'mycative'
        })

设置路由高亮

router-link标签有两个类;分别是: router-link-exact-activerouter-link-active,如果想要改变 router-link-active 名可以通过路由规则的 linkActiveClass 即可( linkActiveClass: 'mycative' )

如果想要给router-link标签改变内容设置高亮可以改变 router-link-active 类中的内容

 .router-link-active,
        .mycative {
            color: red;
            font-weight: 800;
            font-style: italic;
            font-size: 80px;
            text-decoration: underline;
            background: green;
        }

设置路由切换动画

设置路由的切换动画,通过 transition 标签包裹住 router-view 标签,再给 transition 标签设置动画即可。

样式:
.v-enter,
        .v-leave-to {
            opacity: 0;
            transform: translateX(140px);
        }
        
        .v-enter-active,
        .v-leave-active {
            transition: all 0.8s ease;
        }
 <transition mode="out-in">
            <router-view></router-view>
 </transition>

在路由中定义参数

1.如果在路由中使用查询字符串给路由传递参数,则不需要修改路由规则的path属性

 <router-link to="/login?id=10&name=张三">登录</router-link>
 <router-link to="/login ">注册</router-link>
  var login = {
            template: '<h1>登录-----{{$route.query.id}}-----{{$route.query.name}}</h1>',
            created() { //组件的生命周期钩子函数
                console.log(this.$route);
            }
        }
 <router-link to="/login/10/zs">登录</router-link>
 <router-link to="/register">注册</router-link>
 var login = {
            template: '<h1>登录----{{$route.params.id}}----{{$route.params.name}}</h1>',
            created() { //组件的生命周期钩子函数
                console.log(this.$route);
            }
        }
        
 var router = new VueRouter({
            routes: [{
                path: '/login/:id/:name',
                component: login
            }, {
                path: '/register',
                component: register
            }]
        })

路由嵌套

使用children属性,实现子路由,同时,子路由的 path 前面,不要带 / ,否则永远以根路径开始请求,这样不方便我们用户理解 URL 地址

<body>

    <div id="app">
        <router-link to="/account">Account</router-link>
        <router-view></router-view>
    </div>

    <template id="tmpl">
        <div>
           <h1>这是 Account 组件</h1>
           <router-link to="/account/login">登录</router-link>
           <router-link to="/account/register">注册</router-link>
           <router-view></router-view>
        </div>
    </template>
    <script src="../js/vue.js"></script>
    <script src="../js/vue-router.js"></script>
  </body>
<script>
        var account = {
            template: '#tmpl'
        }
        var login = {
            template: '<h1>这是登录模块</h1>'
        }
        var register = {
            template: '<h1>这是注册模块</h1>'
        }

        var router = new VueRouter({
            routes: [{
                    path: '/account',
                    component: account,
                    children: [{
                        path: 'login',
                        component: login
                    }, {
                        path: 'register',
                        component: register
                    }]
                } 
            ]
        })

        var vm = new Vue({
            el: '#app',
            data: {},
            methods: {},
            router
        });
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值