《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件

在这里插入图片描述

vue-router

一、普通html使用“路由”

随着(SPA)单页应用的不断普及,前后端开发分离,目前项目基本都使用前端路由,在项目使用期间页面不会重新加载。
SEO:一般指搜索引擎优化。

优点:
1、用户体验好,和后台网速没有关系,不需要每次都从服务器全部获取,界面展现快。
2、可以再浏览器中输入指定想要访问的url路径地址。
3、实现了前后端的分离,方便开发。有很多框架都带有路由功能模块。
缺点:
1、对SEO不是很友好
2、在浏览器前进和后退时候重新发送请求,没有合理缓存数据。
3、初始加载时候由于加载所有模块渲染,会慢一点。

1)手动实现路由

前端路由目前主要有两种方法:
1)利用url的hash,就是常用的锚点(#)操作,类似页面中点击某小图标,返回页面顶部,JS通过hashChange事件来监听url的改变,IE7及以下需要轮询进行实现。一般常用框架的路由机制都是用的这种方法,例如Angualrjs自带的ngRoute和二次开发模块ui-router,react的react-route,vue-route…
2)利用HTML5的History模式,使url看起来类似普通网站,以”/”分割,没有”#”,但页面并没有跳转,不过使用这种模式需要服务器端的支持,服务器在接收到所有的请求后,都指向同一个html文件,通过historyAPI,监听popState事件,用pushState和replaceState来实现。

由于使用hash方法能够兼容低版本的IE浏览器,简单的的自己搭建前端路由。

举例:实现点击不同标签跳转不同页

说明:
第一步:定义函数
第二步:定义路由切换
第三步:定义dom配置#地址
执行流程:点击a标签 =》 根据#后面的路径调用路由切换Router.route =》 调用具体方法changePage()

案例代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义路由</title>
    <script>
        function Router() {
            this.routes = {};
            this.currentUrl = '';
        }
        //route 存储路由更新时的回调到回调数组routes中,回调函数将负责对页面的更新
        Router.prototype.route = function (path, callback) {
            this.routes[path] = callback || function () { };
        };
        //refresh 执行当前url对应的回调函数,更新页面
        Router.prototype.refresh = function () {
            this.currentUrl = location.hash.slice(1) || '/';
            this.routes[this.currentUrl]();
        };
        //init 监听浏览器 url hash 更新事件
        Router.prototype.init = function () {
            //load事件在当前页面加载时触发
            window.addEventListener('load', this.refresh.bind(this), false);
            //hashchange事件在当前页面URL中的hash值发生改变时触发
            window.addEventListener('hashchange', this.refresh.bind(this), false);
        };
        window.Router = new Router();
        window.Router.init();
    </script>
    <title></title>
</head>
<body>
<ul>
    <li><a href="#/">首页</a></li>
    <li><a href="#/home">主页</a></li>
    <li><a href="#/detail">详情页</a></li>
</ul>
<div id="page"></div>
<script>
    var body = document.querySelector('body');
    //切换hash的事件
    function changePage(page) {
        document.querySelector('#page').innerHTML = page;
    }
    //切换
    Router.route('/', function () {
        changePage('这是首页');
    });
    Router.route('/home', function () {
        changePage('这是主页');
    });
    Router.route('/detail', function () {
        changePage('这是详情页');
    });
</script>
</body>
</html>
结果展示

在这里插入图片描述

2 )vue-router

vue-router是Vue官方提供的路由,用 Vue.js + vue-router 创建单页应用,是非常简单的。使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们。

使用说明:

  1. 引入vue.js和vue-router.js,且引入位置vue.js必须在vue-router.js上面加载
  2. 定义(路由)组件。
  3. 定义路由映射关系
  4. 创建 router 实例
  5. 创建vue实例并挂载router
  6. 使用 router-link 组件,最后一定要配置路由出口<router-view>
举例:使用vue-route实现导航跳转
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router</title>
    <script src="../vue.js"></script>
    <script type="text/javascript" src="https://unpkg.com/vue-router@3.0.0/dist/vue-router.js"></script>
</head>
<body>
<div id="app">
    <h3>Hello App!</h3>
    <p>
        <!-- 使用 router-link 组件来导航. -->
        <!-- 通过传入 `to` 属性指定链接. -->
        <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
        <router-link to="/index">Go to index</router-link>
        <router-link to="/news">Go to news</router-link>
    </p>
    <!-- 路由出口 -->
    <!-- 路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>
</div>
<script>
    // 1. 定义(路由)组件。
    // 可以从其他文件 import 进来
    const Index = { template: '<div>首页</div>' }
    const News = { template: '<div>新闻页</div>' }

    // 2. 定义路由
    // 每个路由应该映射一个组件。 其中"component" 可以是
    // 通过 Vue.extend() 创建的组件构造器,
    // 或者,只是一个组件配置对象。
    // 我们晚点再讨论嵌套路由。
    const routes = [
        { path: '/index', component: Index },
        { path: '/news', component: News }
    ]

    // 3. 创建 router 实例,然后传 `routes` 配置
    // 你还可以传别的配置参数, 不过先这么简单着吧。
    const router = new VueRouter({
        routes // (缩写)相当于 routes: routes
    })
    // 4. 创建和挂载根实例。
    // 记得要通过 router 配置参数注入路由,
    // 从而让整个应用都有路由功能
    const app = new Vue({
        router
    }).$mount('#app');
    // 现在,应用已经启动了!
</script>
</body>
</html>
结果展示

在这里插入图片描述

3)参数路由

通过路由可以传递参数,在使用时用:参数名的形式定义路由参数
通过$route.params获取路由参数:/user/12
通过$route.query获取问号?后面查询参数:name=cat

举例:路由传参并实现打印输出
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router</title>
    <script src="../vue.js"></script>
    <script type="text/javascript" src="https://unpkg.com/vue-router@3.0.0/dist/vue-router.js"></script>
</head>
<body>
<div id="app">
    <h3>Hello App!</h3>
    <p>
        <router-link to="/user/12?name=cat">User12</router-link>
    </p>
    <router-view></router-view>
</div>
<script>
    // 1. 定义(路由)组件。
    const User = { template: '<div>用户: {{ $route.params.id }}-{{ $route.query.name }}</div>' };

    // 2. 定义动态路由
    const routes = [
        // 动态路径参数 以冒号开头
        { path: '/user/:id', component: User }
    ];

    // 3. 创建 router 实例
    const router = new VueRouter({
        routes
    });
    // 4. 创建和挂载根实例
    const app = new Vue({
        router
    }).$mount('#app');
    // 现在,应用已经启动了!
</script>
</body>
</html>
结果展示

在这里插入图片描述

二、脚手架创建vue项目使用“路由”

相关理解

10.1.1vue-router的理解

vue 的一个插件库,专门用来实现 SPA 应用

10.1.2对SPA应用的理解
  1. 单页 Web 应用(single page web application,SPA)。
  2. 整个应用只有一个完整的页面
  3. 点击页面中的导航链接不会刷新页面,只会做页面的局部更新
  4. 数据需要通过 ajax 请求获取。
10.1.3 路由的理解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. 什么是路由
  1. 一个路由就是一组映射关系(key - value) ,多个路由需要路由器(router)进行管理。
  2. key 为路径, value 可能是 function 或 component

在这里插入图片描述

2. 路由分类

1.后端路由:

  1. 理解:value 是 function, 用于处理客户端提交的请求。
  2. 工作过程:服务器接收到一个请求时, 根据请求路径找到匹配的函数来处理请求, 返回响应数据。

2.前端路由:

  1. 理解:value 是 component,用于展示页面内容。
  2. 工作过程:当浏览器的路径改变时, 对应的组件就会显示。

本人其他相关文章链接

1.《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
2.vue2进阶篇:安装路由
3.vue2进阶篇:vue-router之基础路由
4.vue2进阶篇:vue-router之嵌套(多级)路由
5.vue2进阶篇:vue-router之路由的query参数
6.vue2进阶篇:vue-router之命名路由
7.vue2进阶篇:vue-router之路由的params参数
8.vue2进阶篇:vue-router之路由的props配置
9.vue2进阶篇:vue-router之router-link的replace属性
10.vue2进阶篇:vue-router之编程式路由导航
11.vue2进阶篇:vue-router之缓存路由组件
12.vue2进阶篇:vue-router之两个新的生命周期钩子
13.vue2进阶篇:vue-router之使用“全局路由守卫”
14.vue2进阶篇:vue-router之“使用独享路由守卫”
15.vue2进阶篇:vue-router之“使用组件内路由守卫”
16.vue2进阶篇:vue-router之路由的2种工作模式

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大猫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值