(6)Vue基础5-路由vue-router

Vue 的路由

(1)初识路由

路由机制分为前端路由和后端路由,前端路由常用的为hash和histoy模式。

学习vue-router前,搜先要了解三个基本概念:route、routes、router

  1. route 表示一条路由,单数形式
  2. routes 表示一组路由,把route的每一条路由组合起来,形成一个数组
  3. router 表示一个机制,充当路由管理员的角色

代码实例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script type="text/javascript" src="./vue/vue.js"></script>
    <script type="text/javascript" src="./vue/vue-router.js"></script>
    <style type="text/css"></style>
</head>
<body>
<div class="wrap">
    <div id="app">
        <router-link tag="span" to="/login">登录</router-link>
        <router-view></router-view>
    </div>

    <template id="log">
        <div>
            <h2>登录</h2>
            <div>
                <input type="text" placeholder="请输入用户名">
                <input type="password" placeholder="请输入用户密码">
            </div>
        </div>
    </template>
</div>
<script type="text/javascript">
// 1.header标签里引入router.js
// 2.DOM结构<router-link>
// 3.JS逻辑代码

// 对于JSDE逻辑代码部分:
// 1.DOM结构中存在路由router-link,to绑定的是进入到的对象内容
// 2.JS中实例VueRouter()函数,其中有参数routes定义路由数组
// 3.routes路由数组中path和router-link中to属性绑定内容一致,component绑定要显示内容的组件名
// 4.在Vue实例化对象中,要使用router声明定义的路由
// 5.
    var login = {
        template:"#log"
    }

    var routerObj = new VueRouter({
        routes:[
            {path:"/login",component:login}
        ]
    });

    var vm = new Vue({
        el:"#app",
        router:routerObj
    })
</script>
</body>
</html>

 (2)vue-router

(3)用户登录注册案例

(4)动态路由

动态路由是给路径的动态部分匹配不同的id。匹配可以传递参数的路由,传递参数有多种方式:

 

  • 1、query方式,使用?的方式传参,将传递的参数放在? 使用&连接多个参数。
  • 2、params传参方式,一般不需要通过查询字符串传参,通常会搭配路由的history模式,将参数放在路径中标或隐藏。

 query方式传参:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>动态路由query传参</title>
    <script type="text/javascript" src="./vue/vue.js"></script>
    <script type="text/javascript" src="./vue/vue-router.js"></script>
</head>
<body>
<div class="wrap">
    <div id="app">
        <router-link to="/user?id=10&name=admin">登录</router-link>
        <router-view></router-view>
    </div>

    <template id="user">
        <div>
            <h2>我是组件模板</h2>
            <div>
                <p>id:{{this.$route.query.id}}</p>
                <p>name:{{this.$route.query.name}}</p>
            </div>
        </div>
    </template>
</div>

<script type="text/javascript">

    var user = {
        template:"#user",
        created(){
            console.log(this.$route)
        }
    }

    var router = new VueRouter({
        routes:[
        //里面的参数一定包含的关键词是path和component不是复数s
            {path:"/user", component:user}
        ]
    })

    var vm = new Vue({
        el:"#app",
        router,
    })
</script>
</body>
</html>
View Code

params方式传参:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>动态路由params传参</title>
    <script type="text/javascript" src="./vue/vue.js"></script>
    <script type="text/javascript" src="./vue/vue-router.js"></script>
</head>
<body>
<div class="wrap">
    <div id="app">
        <router-link to="/user/10/admin">登录</router-link>
        <router-view></router-view>
    </div>
    <template id="user">
        <div>
            <h3>我是params传参</h3>
            <p>id:{{this.$route.params.id}}</p>
            <p>id:{{this.$route.params.name}}</p>
        </div>
    </template>
</div>
<script type="text/javascript">
    var user = {
        template:"#user",
        created(){
            console.log(this.$route)
        }
    }
    var router = new VueRouter({
        routes:[
        // 前面带冒号的是动态参数,路由会很据出现的位置顺序自动匹配
        {path:"/user/:id/:name",component:user}
        ]
    })
    var vm = new Vue({
        el:"#app",
        router
    })
</script>
</body>
</html>
View Code

(5)嵌套路由

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>嵌套路由</title>
    <script type="text/javascript" src="./vue/vue.js"></script>
    <script type="text/javascript" src="./vue/vue-router.js"></script>
    <style type="text/css">
        .wrap{width:1000px; margin:0 auto;}
        .li_list{display: inline-block; width:150px; float: left;}
        .li_list li{height: 40px; line-height: 40px;  width:100%;background-color: #e02e24;font-weight: 800; list-style: none; text-align: center; margin-bottom: 10px; }
        .conc{display: inline-block; width:60%; margin-left:20px; float: left;}
    </style>
</head>
<body>
<div class="wrap">
    <div id="app">
        <ul class="li_list">
            <router-link to="/about" tag="li">关于公司</router-link>
            <router-link to="/contact" tag="li">联系我们</router-link>
        </ul>
        <router-view></router-view>
    </div>
    <!-- 关于我们 -->
    <template id="about">
        <div class="conc">
            <h3>浙江科技有限公司</h3>            
            <router-link to="/about/detail" >公司简介</router-link>
            <router-link to="/about/governance">公司治理</router-link>            
            <router-view></router-view>
        </div>
    </template>
    <template id="detail">
        <div>
            <p>我们是一家非常与爱国主义情怀的公司</p>
        </div>
    </template>
    <template id="governance">
        <div>
            <p>公司坚持以客户为中心、以奋斗者为本... ...</p>
        </div>
    </template>

    <!-- 联系我们 -->
    <template id="contact">
        <div class="conc">
            <h3>联系我们</h3>
            <p>服务内容包含java培训,vue培训,javaScript培训,SQLServer培训</p>
        </div>
    </template>
</div>
<script type="text/javascript">
    // 关于公司对应的内容
    var about={
        template:"#about"
    }
    // 子组件对应的内容
    var detail ={
        template:"#detail"
    }

    var governance={
        template:"#governance"
    }

    // 联系我们对应的内容
    var contact={
        template:"#contact"
    }

    var router = new VueRouter({
        routes:[
            {path:"/",redirect:"/about"},
            {path:"/about",component:about,
            children:[
                {path:"detail",component:detail},
                {path:"governance",component:governance},
            ]},
            {path:"/contact",component:contact},
        ]
    })

    var vm = new Vue({
        el:"#app",
        router,
    })
</script>
</body>
</html>
View Code

(6)$router.push

路由编程式导航,传参也有两种方式,params和query

query传参

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>编程式导航router.push</title>
    <script type="text/javascript" src="./vue/vue.js"></script>
    <script type="text/javascript" src="./vue/vue-router.js"></script>

</head>
<body>
<div class="wrap">
    <div id="app">
        <button @click="goStart">跳转</button>
        <router-view></router-view>
    </div>
    <template id="user">
        <div>
            <p>用户名:{{this.$route.query.name}}</p>
        </div>
    </template>
</div>
<script type="text/javascript">
    var user = {
        template:"#user"
    }

    var router = new VueRouter({
        routes:[
            {path:"/user",component:user}
        ]
    })

    var vm = new Vue({
        el:"#app",
        router,
        methods:{
            goStart(){
                this.$router.push({
                    path:"/user",
                    query:{
                        name:"admin"
                    }
                }).catch(err => {
                    console.log("all good")
                })
            }
        }
    })
</script>
</body>
</html>
View Code

params传参

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>编程式导航router.push</title>
    <script type="text/javascript" src="./vue/vue.js"></script>
    <script type="text/javascript" src="./vue/vue-router.js"></script>

</head>
<body>
<div class="wrap">
    <div id="app">
        <button @click="goStart">跳转</button>
        <router-view></router-view>
    </div>
    <template id="user">
        <div>
            获取的时候使用的是$route,改变的时候使用的$router
            <p>用户名:{{this.$route.params.name}}</p>
        </div>
    </template>
</div>
<script type="text/javascript">
    var user = {
        template:"#user"
    }

    var router = new VueRouter({
        routes:[
            {path:"/user",component:user, name:"user"}
        ]
    })

    var vm = new Vue({
        el:"#app",
        router,
        methods:{
            goStart(){
                this.$router.push({
                    name:"user",
                    params:{
                        name:"admin"
                    }
                }).catch(err => {
                    console.log("all good")
                })
            }
        }
    })
</script>
</body>
</html>
View Code
posted @ 2020-11-22 19:21  壹碗  阅读(148)  评论(0)    收藏  举报