Vue基础(五)---- 前端路由
基本结构:
◆ 1、路由的基本概念与原理
◆ 2、vue-router的基本使用
◆ 3、vue-router嵌套路由
◆ 4、vue-router动态路由匹配
◆ 5、vue-router命名路由
◆ 6、vue-router编程式导航
◆ 7、基于vue-router的案例
◆ 1、路由的基本概念与原理
1.1 路由
    路由是一个比较广义和抽象的概念,路由的本质就是对应关系。
    在开发中,路由分为:
        ◆ 后端路由
        ◆ 前端路由
  ◆ 后端路由
    本质:后端路由根据不同的 URL地址 分发不同的 服务器资源。
    过程:浏览器发送url 地址请求  --------------被后端路由拦截----------------> 后端路由去服务器查找对应的服务器资源 --------------------> 后端路由发送给浏览器进行渲染

    (早期开发中,绝大多数网站都是采用这种方式)--- 后端渲染
      但是这种渲染方式会存在性能问题,假设浏览器有频繁的提交表单的数据交互行为,后端路由会造成网页的不断刷新,体验非常差
  因此:
     
 
    SPA(Single Page Application)单页面应用程序
      ? 后端渲染(存在性能问题)--------------发展最初
      ? Ajax前端渲染(前端渲染局部刷新网页,提高性能,但是不支持浏览器的前进后退操作)----------------发展中
      ? SPA(Single Page Application): ---------------发达
        整个网站只有一个页面,内容的变化通过Ajax局部更新实现、同时支持浏览器地址栏的前进和后退操作
      ? SPA实现原理之一:基于URL地址的hash(hash的变化会导致浏览器记录访问历史的变化、但是hash的变化不会触发新的URL请求)
      ? 在实现SPA过程中,最核心的技术点就是前端路由
  2. 前端路由
    ?概念:根据不同的用户事件,显示不同的页面内容
    ?本质:用户事件与事件处理函数之间的对应关系

不推荐手动模拟路由,尽量使用 Vue.js 官方的路由管理器--------------Vue Router
◆ 2、vue-router的基本使用
Vue Router(官网:https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器。
  它和Vue.js 的核心深度集成,可以非常方便的用于SPA应用程序的开发。
    ? 支持HTML5 历史模式或 hash 模式
    ? 支持嵌套路由
    ? 支持路由参数
    ? 支持编程式路由
    ? 支持命名路由
    ? 导航守卫
    ? 路由懒加载
  2.1 基本使用步骤
    1. 引入相关的库文件
      首先引入:<script src="./lib/vue_2.5.22.js"></script>
      其次引入:<script src="./lib/vue-router_3.0.2.js"></script>,因为 vue-router 是依赖于 vue 的,顺序不能颠倒
    2. 添加路由链接  
    3. 添加路由填充位   
<div id="app">
      <!-- router-link 是 vue 中提供的标签,默认会被渲染为 a 标签 -->
      <!-- to 属性默认会被渲染为 href 属性 -->
      <!-- to 属性的值默认会被渲染为 # 开头的 hash 地址 -->
      <router-link to="/user">User</router-link>
      <router-link to="/register">Register</router-link>
      
      <!-- 路由占位符 -->
      <!-- 将来通过路由规则匹配到的组件,将会被渲染到 router-view 所在的位置 -->
      <router-view></router-view>
 </div>    4. 定义路由组件
const User = {
  template: "<h1>User 组件</h1>",
};
const Register = {
  template: "<h1>Register 组件</h1>",
};    5. 配置路由规则并且创建路由实例
 // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          // 每个路由规则都是一个配置对象,其中至少包含 path 和 component 两个属性:
          // path 表示当前路由规则匹配的 hash 地址
          // component 表示当前路由规则对应要展示的组件
          { path: "/user", component: User },
          { path: "/register", component: Register },
        ],
      });    6. 把路由挂载到Vue 根实例中
// 创建 vm 实例对象
      const vm = new Vue({
        // 指定控制的区域
        el: "#app",
        data: {},
        // 挂载路由实例对象
        // router: router(在ES6中如果属性名和值一样,可以简写)
        router,
      });