vuevue-router基本使用

Vue的全家桶(kfc)vue+vue-router+vuex

vue+vue-router 主要用来做SPA(Single Page Application)单页面应用
vue-router是vue的核心插件
​
为什么要使用单页面应用?
传统的路由跳转,如果后端资源过多,会导致页面出现白屏现象,让前端来做路由,在某个声命周期的钩子函数中发送ajax(要数据),渲染驱动(DOM)   (为了用户体验)

vue-router下载

<script src="vue.min.js"></script>              
<script src="vue-router.js"></script>    依赖于vue的
可直接复制cdn代码

 

vue-router是vue的核心插件,vue+vue-router 主要来做 SPA(Single Page Application) 单页面应用

为什么要使用单页面应用?

传统的路由跳转,如果后端资源过多,会导致页面出现`白屏现象`,让前端来做路由,在某个生命周期的钩子函数中发送ajax,数据驱动。为了用户体验

官网

https://router.vuejs.org/zh/installation.html

 

安装

如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)
如果使用全局的 script 标签,则无须如此 (手动安装)。

直接下载 / CDN

https://unpkg.com/vue-router/dist/vue-router.js

项目中下载指定版本

cnpm i vue-router@2 -S

 

路由图示查找顺序

 

 

 1.定义路由组件    示例eg:https://www.cnblogs.com/ouyangjintao/p/14891487.html

 
    const Home = {
        data() {
            return {}
        },
        template: `<div>我是首页</div>`
    }
 

2.创建router实例,配置路由规则

 
 const router = new VueRouter({
        //定义路由规则
        mode:'history',//少去#号
        routes: [          //注意是 routes不是router
            {
              path:'/',
              redirect:'/home'
            },
            {
                path: '/home',
                component: Home      //记住查询是没有引号的
            },
            {
                path: '/course',
                component: Course
            }
        ]
    })
 

3.创建Vue实例,并挂载路由对象

 
    new Vue({
        el: '#app',
        //挂载 路由对象
        router,
        data() {
            return {}
        },
        template: `<App />`,
        components: {        
            App        //局部挂子是有s的   全局没有
        }
    })
 

4.template中渲染router-link和router-view

 
    let App = {
        data() {
            return {}
        },
//        router-link和router-view 是vue-router 提供的两个全局组件
        //router-view  是路由组件的出口
        //router-link默认会被渲染成a标签,to属性默认被渲染成href
        template: `
            <div>

                <div class="header">
                    
                    <router-link to = '/home'>首页</router-link>
                    <router-link to = '/course'>免费课程</router-link>
                </div>
                <router-view></router-view>
            </div>
        `
    }
 
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app">

</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>
    //如果以后是模块化编程,Vue.proptotype.$VueRouter = VueRouter
    //    Vue.use(VueRouter)
    const Home = {
        data() {
            return {}
        },
        template: `<div>我是首页</div>`
    }
    const Course = {
        data() {
            return {}
        },
        template: `<div>我是免费课程</div>`
    }
    //创建路由
    const router = new VueRouter({
        //定义路由规则
        mode:'history',
        routes: [
            {
              path:'/',
              redirect:'/home'
            },
            {
                path: '/home',
                component: Home
            },
            {
                path: '/course',
                component: Course
            }
        ]
    })
    let App = {
        data() {
            return {}
        },
//        router-link和router-view 是vue-router 提供的两个全局组件
        //router-view  是路由组件的出口
        template: `
            <div>

                <div class="header">
                    <router-link to = '/home'>首页</router-link>
                    <router-link to = '/course'>免费课程</router-link>
                </div>
                <router-view></router-view>
            </div>

        `

    }
    new Vue({
        el: '#app',
        //挂载 路由对象
        router,
        data() {
            return {}
        },
        template: `<App />`,
        components: {
            App
        }
    })

</script>

</body>
</html>
vue-router的基本使用

 

 

命名路由

有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称。

 要链接到一个命名路由,可以给 router-link 的 to 属性传一个对象:

注意需要绑定 :to

 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app">

</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>
    const Home = {
        data() {
            return {}
        },
        template: `<div>我是首页</div>`
    }
    const Course = {
        data() {
            return {
                categoryList:[]
            }
        },
        template: `<div>
        <span v-for = '(item,index) in categoryList'>{{item.name}}</span>


    </div>`,
        methods:{
          getCategroyList(){

          }
        },
        created(){
            //ajax 发送请求 数据获取
            this.getCategroyList();
        }
    }
    //创建路由
    const router = new VueRouter({
        //定义路由规则
        routes: [
            {
              path:'/',
              redirect:'/home'
            },
            {
                path: '/home',
                name:'Home',
                component: Home
            },
            {
                path: '/course',
                name:'Course',
                component: Course
            }
        ]
    })
    let App = {
        data() {
            return {}
        },
//        router-link和router-view 是vue-router 提供的两个全局组件
        //router-view  是路由组件的出口
        template: `
            <div>

                <div class="header">
                    <router-link :to = '{name:"Home"}'>首页</router-link>
                    <router-link :to = '{name:"Course"}'>免费课程</router-link>
                </div>
                <router-view></router-view>
            </div>

        `

    }
    new Vue({
        el: '#app',
        //挂载 路由对象
        router,
        data() {
            return {}
        },
        template: `<App />`,
        components: {
            App
        }
    })

</script>

</body>
</html>
命名路由

动态路由匹配

$route 路由信息对象

提醒一下,当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。

这里我们使用watch (监测变化) $route 对象:

$route(to,from) 这两个参数,to 代表到哪里去 , from 代表你从哪里来

 1.动态绑定参数

 

 

2.router-link绑定这个对象

 3.watch监听路由变化

 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app">

</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>
    //如果以后是模块化编程,Vue.proptotype.$VueRouter = VueRouter
    //    Vue.use(VueRouter)

    //路由范式:

    //http://127.0.0.1:8080/index/user
    //http://127.0.0.1:8080/user/1 params
    //http://127.0.0.1:8080/user/2
    //http://127.0.0.1:8080/user?user_id =1   query


    const User = {
        data() {
            return {
                user_id:null
            }
        },
        template: `<div>我是用户{{ user_id}}</div>`,
        created() {
            console.log(this.$route); //路由信息对象
//            提醒一下,当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。
        },
        watch: {
            '$route'(to, from) {
                // 对路由变化作出响应...
                console.log(to.params.id);
                console.log(from);
                this.user_id = to.params.id;
                //发送ajax

            }
        }
    }

    //创建路由
    const router = new VueRouter({
        //定义路由规则
        routes: [

            {
                path: '/user/:id',
                name: 'User',
                component: User
            }

        ]
    })
    let App = {
        data() {
            return {}
        },
//        router-link和router-view 是vue-router 提供的两个全局组件
        //router-view  是路由组件的出口
        template: `
            <div>

                <div class="header">
                    <router-link :to = '{name:"User",params:{id:1}}'>用户1</router-link>
                    <router-link :to = '{name:"User",params:{id:2}}'>用户2</router-link>

                </div>
                <router-view></router-view>
            </div>

        `

    }
    new Vue({
        el: '#app',
        //挂载 路由对象
        router,
        data() {
            return {}
        },
        template: `<App />`,
        components: {
            App
        }
    })

</script>

</body>
</html>
动态路由匹配

query

 

 

编程式导航

$router 路由对象 VueRouter

标签绑定事件后,使用$router.push进行跳转

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="../vue.js"></script>
<script src="../vue-router.js"></script>
<div class="app">

</div>
<div></div>

<script>
    const Home = {
        data(){
            return{}
        },
        template: `<div>我是首页</div>
`
    };
    const User = {
        data(){
            return{
                user_id:null
            }
        },
        template: `<div>我是用户{{ user_id }}号
                    <button @click="clickHankler">跳转首页</button>
                    </div>
`,
        methods:{
            //编程式导航
          clickHankler (){
              this.$router.push({
                  name:'Home'
              })
          }
        },
        watch:{
             '$route'(to,from) {
                  // console.log(to);
                  console.log(from);
                  this.user_id = to.params.id
             }
        }
    };
    
    const router = new VueRouter({
        mode:"history",
        routes:[
            {
                path:'/user/:id',
                component: User,
                name:'user'
            },
            {
                path:'/home',
                component:Home,
                name:'Home'
            }
        ],

    });

    let App = {
        data(){
            return{}
        },
        template:`
            <div>
            <router-link :to="{name:'user',params:{id:1}}">用户1</router-link>
            <router-link :to="{name:'user',params:{id:2}}">用户2</router-link>
            <router-view></router-view>
            </div>
        `
    };
    new Vue({
        el:'.app',
        router,
        data(){
            return{

            }
        },
        template:`<App/>`,
        components:{
            App
        }
    })
</script>

</body>
</html>
编程式导航

 其他的方式(使用方式同push)

// 开发中可以先进行权限,登录之类的判断,然后再进行跳转
                // this.$router.back(); // 返回上一页,本质上就是 location.back()
                // this.$router.go(-1); // 返回上一页,本质上就是 location.go()
                // this.$router.forward(); // 跳转到下一页,本质上就是 location.forward()
                this.$router.push("/user"); // 跳转到站内的制定地址页面中,本质上就是 location.href
                // 注意,this.$router.push 不能跳转到其他网站。如果真的要跳转外站,则使用location.href="站外地址,记得加上http://协议"

 

posted @ 2021-06-16 21:20  欧阳锦涛  阅读(86)  评论(0)    收藏  举报
TOP 底部