zoukankan      html  css  js  c++  java
  • 03-vue-router

    前端路由的实现原理

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <!--
        SPA : Single Page Application
    
        前端路由
            1.锚点值 监视
            2.ajax获取动态的数据
            3.核心点是锚点值的改变
    
        前端中 vue|react|angular 都很适合做单页面应用
     -->
    
    <a href="#/login">登录页面</a>
    <a href="#/register">注册页面</a>
    <div id="app">
    
    
    </div>
    
    <script type="text/javascript">
    
        // onhashchange 事件  url上的锚点数据(#/xxx改变)
        var oDiv = document.getElementById('app');
    
        window.onhashchange = function () {
            console.log(location.hash);
            // 根据不同的锚点值,对页面不同的切换。
            switch (location.hash) {
                case '#/login':
                    oDiv.innerHTML = '<h2>登录页面</h2>';
                    break;
                case '#/register':
                    oDiv.innerHTML = '<h2>注册页面</h2>';
                    break;
                default:
                    // statements_def
                    break;
            }
        }
    </script>
    
    </body>
    </html>
    View Code

    vue+vue-router 主要来做单页面应用(Single Page Application)

    为什么我们要做单页面应用?

    (1)传统的开发方式 url改变后,立马发送请求,响应整个页面,有可能资源过多,传统开发会让前端的页面出现 “白屏” 用户体验不好

    (2)SPA 单页面应用 : 锚点值的改变后,不会立刻发送请求,而是在某个合适的时机,发送ajax请求,局部改变页面中的数据

    页面不立刻跳转用户体验好



    vue-router集成

    它是vue中核心插件
    1. 下载vue-router

      npm init --yes
      npm install vue-router --save
      • 引入vue-router的模块 默认会抛出一个VueRouter对象 另外还有两个全局的组件router-link 和router-view

    2. Vue.use(VueRouter)

    3. 创建路由对象

    var router = new VueRouter({

    // 配置路由对象

    routes:[
    {
    path:'/login',
    name:'login',
    component:Login
    },
    {
    path:'/register',
    name:'register',
    component:Register
    }
    ]

    });

    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

     
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <div id="app"></div>
    <script type="text/javascript" src="vue.js"></script>
    <!-- 1.引入 vue-router的对象 -->
    <script type="text/javascript" src="./node_modules/vue-router/dist/vue-router.js"></script>
    <!-- 全局的VueRouter对象   vue-router 还给咱们提供了两个全局的组件 router-link  router-view-->
    <script type="text/javascript">
    
    
        // 2.让Vue使用该VueRouter创建
        Vue.use(VueRouter);
    
    
        var Login = {
            template: `
                    <div>登录页面</div>
                `
        };
        var Register = {
            template: `
                    <div>注册页面</div>
                `
        };
    
        // 3.创建一个路由对象
        var router = new VueRouter({
            // 配置路由对象
    
            routes: [
                {
                    path: '/login',
                    component: Login
                },
                {
                    path: '/register',
                    component: Register
                }
            ]
    
        });
        var App = {
    
            <!--router-link默认会被渲染成a标签 to属性默认会被渲染成href属性-->
            template: `
                <div>
                    <router-link to="/login">登录页面</router-link>
                    <router-link to="/register">注册页面</router-link>
                    <router-view></router-view>
                </div>
                `, <!--路由组件的出口-->
    
        };
    
        new Vue({
            el: '#app',
            components: {
                App
            },
            router,      //使用路由,不然会报错
            template: `<App />`
    
        });
    
    
    </script>
    
    </body>
    </html>
    02-router 使用
     
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <div id="app"></div>
    <script type="text/javascript" src="vue.js"></script>
    <!-- 1.引入 vue-router的对象 -->
    <script type="text/javascript" src="./node_modules/vue-router/dist/vue-router.js"></script>
    <!-- 全局的VueRouter对象   vue-router 还给咱们提供了两个全局的组件 router-link  router-view-->
    <script type="text/javascript">
    
        // 2.让Vue使用该VueRouter创建
        Vue.use(VueRouter);
    
        var Login = {
            template: `
                    <div>登录页面</div>`
        };
        var Register = {
            template: `
                    <div>注册页面</div>`
        };
        // 3.创建一个路由对象
        var router = new VueRouter({
            // 配置路由对象
            routes: [
                {
                    path: '/login',
                    name: 'login',
                    component: Login
                },
                {
                    path: '/register',
                    name: 'register',
                    component: Register
                }
            ]
    
        });
        var App = {
            // 绑定路由
            template: `
                <div>
                    <router-link :to="{name:'login'}">登录页面</router-link>
                    <router-link :to="{name:'register'}">注册页面</router-link>
                    <router-view></router-view>
                </div>`
            //路由组件的出口
        };
        new Vue({
            el: '#app',
            components: {
                App
            },
            router,
            template: `<App />`
        });
    </script>
    </body>
    </html>
    03-命名路由
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <div id="app"></div>
    <script type="text/javascript" src="vue.js"></script>
    <!-- 1.引入 vue-router的对象 -->
    <script type="text/javascript" src="./node_modules/vue-router/dist/vue-router.js"></script>
    <!-- 全局的VueRouter对象   vue-router 还给咱们提供了两个全局的组件 router-link  router-view-->
    <script type="text/javascript">
    
        // 路由范式
        // (1)xxxx.html#/user/1         params
        // (2)xxxx.html#/user?userId = 2    query
        // 2.让Vue使用该VueRouter创建
        Vue.use(VueRouter);
        var UserParams = {
            template: `
                    <div>我是用户1</div>
                `,
            created() {
                console.log(this.$route.params.userId);
                // 发送ajax请求
                console.log(this.$router);
            }
        };
        var UserQuery = {
            template: `
                    <div>我是用户2</div>
                `,
            created() {
                console.log(this.$route);
                // 发送ajax请求
                console.log(this.$router);  // 总的 router 对象
                console.log('route',this.$route)   // 单个的route 对象 
    
    
            }
        };
    
        // 3.创建一个路由对象
        var router = new VueRouter({
            // 配置路由对象
            routes: [
                {   // 动态的路由参数 以冒号开头
                    path: '/user/:userId',
                    name: 'userp',
                    component: UserParams
                },
                {
                    path: '/user',
                    name: 'userq',
                    component: UserQuery
                }
            ]
        });
        var App = {
            <!--router-link默认会被渲染成a标签 to属性默认会被渲染成href属性-->
            template: `
                <div>
                <router-link :to="{name:'userp',params:{userId:1}}">用户1</router-link>
                <router-link :to="{name:'userq',query:{userId:2}}">用户2</router-link>
                <router-view></router-view>
                </div>
                `,
            <!--路由组件的出口-->
        };
    
        new Vue({
            el: '#app',
            components: {
                App
            },
            router,
            template:
                `<App />`
        });
    </script>
    </body>
    </html>
    04-路由参数


    4.路由对象挂载到vue实例化对象中

    var App = {
    template:`
    <div>
    <!--router-link默认会被渲染成a标签 to属性默认会被渲染成href属性-->
    <router-link :to="{name:'login'}">登录页面</router-link>
    <router-link :to="{name:'register'}">注册页面</router-link>

    <!--路由组件的出口-->

    <router-view></router-view>

    </div>
    `
    };

    new Vue({
    el:'#app',
    components:{
    App
    },
    //挂载
    router,
    template:`<App />`
    });

    命名路由

    给当前的配置路由信息对象设置name:'login'属性

    :to = "{name:'login'}"

    路由范式

    (1)xxxx.html#/user/1 配置路由对象中

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

      <router-link :to = "{name:'user',params:{id:1}}"></router-link>

    (2)xxxx.html#/user?userId = 1

    { path:'/user' } <router-link :to = "{name:'user',query:{id:1}}"></router-link>

    在组件内部通过this.$route 获取路由信息对象

    嵌套路由

    一个router-view 嵌套另外一个router-view

    动态路由匹配

    let User = {
     template: '<div>User</div>'
    }

    let router = new VueRouter({
     routes: [
       // 动态路径参数 以冒号开头
      { path: '/user/:id', component: User }
    ]
    })

    现在呢,像 /user/foo/user/bar 都将映射到相同的路由。

    一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。于是,我们可以更新 User 的模板,输出当前用户的 ID:

    let User = {
    template: '<div>User {{ $route.params.id }}</div>'
    }
  • 相关阅读:
    SpreadJS V13.0发布,聚焦表单设计与数据交互,让您的工作效率突飞猛进!
    springboot---redis缓存的使用
    springboot logback日志的使用
    Https与Http的区别以及Https的解说
    maven的使用解说
    Spring SpringMVC myBatis(简称SSM)理解
    抽象类与接口的区别
    Hadoop综合大作业
    hive基本操作与应用
    熟悉HBase基本操作
  • 原文地址:https://www.cnblogs.com/wenyule/p/10122747.html
Copyright © 2011-2022 走看看