前端路由

区别于后端路由  —  前端路由指的是,单页面应用程序中通过 Hash 来改变、切换页面的方式。

  • 后端路由:在 Web 开发中,路由是指根据 URL 分配到对应的处理程序;

对于普通网站,所有的超链接都是 URL 地址,所有的 URL 地址都对应服务器上对应的资源

  • 前端路由:对于单页面应用程序来说,主要通过 URL 中的 hash( #号 )来实现不同页面间的切换;

同时,hash 有一个特点:HTTP 请求中不会包含 hash 相关的内容,所以,单页面程序中的页面跳转主要用 hash 实现


对于大多数单页面应用,推荐使用官方支持的路由管理工具:vue-router。

vue-router 通过管理 URL,实现 URL 和组件的对应以及通过 URL 进行组件之间的切换


在 Vue 中使用 vue-router

方式 1 :直接下载( 官网:https://router.vuejs.org/zh/ )或使用 CDN


<!-- 引入 -->
<script src="./js/vue/vue.min@2.6.10.js"></script>
<script src="./js/vue-router/vue-router@3.0.2.js"></script>
<body>
	<div id="app">
		<Foo></Foo>
		<div>
			<!-- 路由导航 -->
			<router-link to="/foo">Foo</router-link>
			<router-link to="/bar">Bar</router-link>
		</div>
		<!-- 路由占位符 -->
		<router-view></router-view>
	</div>
	<script>
		const Foo = {
			template:'<div>Foo组件</div>'
		}
		const Bar = {
			template:'<div>Bar组件</div>'
		}
		// 创建路由实例
		var router = new VueRouter({
			// routes 是路由构造配置(或称之:路由规则数组)
			routes:[
				// 每个路有规则都是一个配置对象,其中至少包含path和component两个属性
				// path 表示当前路由规则匹配的 hash 地址
				// component 表示当前路由对应要展示的组件
				{
					path:'/foo',
					component:Foo
				},
				{
					path:'/bar',
					component:Bar
				}
			]
		})
		var vm = new Vue({
			el:'#app',
			router,  // 挂载路由实例
		})
	</script>
</body>

方式 2( 推荐 ):通过 vue-cli 创建项目,使用 npm 安装 vue-router

  • 在命令行中安装 vue-router 库
npm install vue-router
  • 创建路由配置文件,并挂载路由实例
// 路由配置文件 router/index.js
import Vue from 'vue'
import Router from 'vue-router'    // 引入vue-router
Vue.use(Router) 

// 导入组件 
import Foo from '@/components/Foo'
import Bar from '@/components/Bar'

export default new Router({    // 创建路由实例
  // 路由构造配置
  routes: [    
    // 路由规则
    { path: '/foo', component: Foo }
    { path: '/bar', component: Bar }
  ],
  // 其他路由配置
})
# 将路由实例挂载到 Vue 实例中

// 一般是main.js
import router from './router'    // 引入路由配置文件

new Vue({
  el: '#app',
  router,    // 挂载路由实例
  components: { App},
  template: '<App/>'
})
  • 在组件中使用路由导航和渲染视图
<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- 使用 router-link 组件来导航. -->
    <!-- 通过传入 `to` 属性指定链接. -->
    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!-- 渲染视图,又称为路由占位符 -->
  <!-- 路由匹配到的组件将渲染在这里 -->
  <router-view></router-view>
</div>