Vue.js之vue-router路由

1概述

vue-router是vue的一个库,可以快速的开发一个单页应用;

在导航切换时,页面根本就不刷新,没有整页刷新的概念,所以用户的输入可以被保留下来,不丢失状态,不丢失数据;

不用每切换一次导航就重新拉取一遍数据,只需要取一次数据,就可以一直用;

在网页上最频烦的操作就是点点点,这样页面不刷新,就可以极大的节省前端和后端的资源。

2安装和基本配置

引用vue文件和vue-router的库文件,https://cdn.bootcss.com/vue-router/3.0.6/vue-router.js

例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>路由</title>
    </head>
    <body>
        <div id="app">
            <div>
                <router-link to="/">首页</router-link>
                <router-link to="/about">关于</router-link>
            </div>
            <div>
                <router-view></router-view>
            </div>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script src="js/vue-router.js"></script>
    <script>
        var rounts=[
            {
                path:'/',
                component:{
                    template:`
                    <div><h1>首页</h1></div>
                    `
                }
            },
            {
                path:'/about',
                component:{
                    template:`
                    <div><h1>关于</h1></div>
                    `
                }
            }
        ];
        
        var router=new VueRouter({
            routes:rounts
        });        
        
        var app=new Vue({
            el:'#app',
            router:router            
        })
    </script>
</html>

 

扫描二维码关注公众号,回复: 6250050 查看本文章

配置说明:

定义一个数组rounts,数组中的每一项都是一个配置,path代表路由的地址,/就表示首页(默认页);可以直接传进一个component,这个component和普通的component一样,该有的功能都可以用;

然后把定义的规则传给构造的路由,var router=new VueRouter();定义一个routes,把数组传给它就可以了;

在new Vue中加一个router属性,把定义的构造器router传进去;

html中,要加一个标签router-link,用to指定地址,再用router-view表示显示的视图,它显示的就是template中定义的内容

3传参及获取传参

vue-router中传参有两种方式,

第一种,User后面加个冒号:/user/:name,在template中通过{{$route.params.name}}来获取。

例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>路由-传参</title>
    </head>
    <body>
        <div id="app">
            <div>
                <router-link to="/">首页</router-link>
                <router-link to="/about">关于</router-link>
                <router-link to="/user/大美女">大美女</router-link>
                <router-link to="/user/小东西">小东西</router-link>
            </div>
            <div>
                <router-view></router-view>
            </div>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script src="js/vue-router.js"></script>
    <script>
        var rounts=[
            {
                path:'/',
                component:{
                    template:`
                    <div><h1>首页</h1></div>
                    `
                }
            },
            {
                path:'/about',
                component:{
                    template:`
                    <div><h1>关于</h1></div>
                    `
                }
            },
            {
                path:'/user/:name',
                component:{
                    template:`
                    <div>
                        <p>我叫{{$route.params.name}}</p>
                        <!-- <p>我今年{{$route.query.age}}岁</p> -->
                    </div>
                    `
                }
            }
        ];
        
        var router=new VueRouter({
            routes:rounts
        });        
        
        var app=new Vue({
            el:'#app',
            router:router            
        })
    </script>
</html>

第二种,通过query,就是地址后面跟着?这样,例如:

http://127.0.0.1:8848/vuetest.html?age=20#/,在template中把params换成query就可以了,{{$route.query.age}}

例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>路由-传参</title>
    </head>
    <body>
        <div id="app">
            <div>
                <router-link to="/">首页</router-link>
                <router-link to="/about">关于</router-link>
                <router-link to="/user/大美女">大美女</router-link>
                <router-link to="/user/小东西">小东西</router-link>
            </div>
            <div>
                <router-view></router-view>
            </div>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script src="js/vue-router.js"></script>
    <script>
        var rounts=[
            {
                path:'/',
                component:{
                    template:`
                    <div><h1>首页</h1></div>
                    `
                }
            },
            {
                path:'/about',
                component:{
                    template:`
                    <div><h1>关于</h1></div>
                    `
                }
            },
            {
                path:'/user/:name',
                component:{
                    template:`
                    <div>
                        <p>我叫{{$route.params.name}}</p>
                        <p>我今年{{$route.query.age}}岁</p>
                    </div>
                    `
                }
            }
        ];
        
        var router=new VueRouter({
            routes:rounts
        });        
        
        var app=new Vue({
            el:'#app',
            router:router            
        })
    </script>
</html>

4子路由

在上面例子的基础上,想实现“大美女”后面加个/more

再加一个children的配置项,代表子路由,也是一个数组,写法和父级的rounts一样,path可以写成more,传参写法也一样,

(未完待续...) 

猜你喜欢

转载自www.cnblogs.com/hzhjxx/p/10878009.html