vue入门——vue-router

1,认识路由

改变路径的方式有两种: URL的hash 和 HTML5的history

URL的hash
URL的hash也就是锚点(#), 本质上是改变window.location的href属性.
我们可以通过直接赋值location.hash来改变href, 但是页面不发生刷新

HTML5的history模式:五种模式改变URL而不刷新页面:
history.pushState()
history.replaceState()
history.go()
history.back() 等价于 history.go(-1)
history.forward() 等价于 history.go(1)
这三个接口等同于浏览器界面的前进后退。

2,vue-router基本使用

vue-router是基于路由和组件的
路由用于设定访问路径, 将路径和组件映射起来.
在vue-router的单页面应用中, 页面的路径的改变就是组件的切换

  • 步骤一: 安装vue-router: npm install vue-router --save

  • 步骤二: 在模块化工程中使用它(因为是一个插件, 所以可以通过Vue.use()来安装路由功能)

    • 1:导入路由对象,并且调用 Vue.use(VueRouter)
    • 2:创建路由实例,并且传入路由映射配置
    • 3:在Vue实例中挂载创建的路由实例
  • 使用vue-router的步骤:

    • 1 : 创建路由组件
    • 2 : 配置路由映射: 组件和路径映射关系
    • 3 : 使用路由: 通过和
  • : 该标签是一个vue-router中已经内置的组件, 它会被渲染成一个标签.

  • : 该标签会根据当前的路径, 动态渲染出不同的组件.

    • 网页的其他内容, 比如顶部的标题/导航, 或者底部的一些版权信息等会和处于同一个等级.
    • 在路由切换时, 切换的是挂载的组件, 其他内容不会发生改变.
3,vue-router 补充

路由的默认路径: 让路径默认跳到到首页, 并且渲染首页组件
配置解析: 在routes中又配置了一个映射.
path配置的是根路径: /
redirect是重定向, 也就是我们将根路径重定向到/home的路径下, 这样就可以得到我们想要的结果了.

const routes = [
  { path: '/',	 redirect : '/Home'},
   ...  ]

默认情况下, 路径的改变使用的URL的hash.
使用HTML5的history模式: mode : ‘history’,

router-link补充
1,tag: tag可以指定之后渲染成什么组件,
比如上面的代码会被渲染成一个<li>元素, 而不是<a> <router-link to='/home' tag='li'>
2,replace: replace不会留下history记录, 所以指定replace的情况下, 后退键返回不能返回到上一个页面中,
3,active-class: 当对应的路由匹配成功时, 会自动给当前元素设置一个router-link-active的class, 设置active-class可以修改默认的名称.

const router =new VueRouter({
  routes,
  mode : 'history',
  linkActiveClass : 'active'
}) ;

动态路由: path和Component的匹配关系
希望路径是:/user/aaaa或/user/bbbb

路由脚本:
  {
    path: '/User/:use_id',
    component : User,
   // meta:{   title: "用户" }
  },
主页使用:
 <router-link   to="/user/cookie"    replace   tag="button"  >主页新闻</router-link>
User 组件使用: 
<p>{{$route.params.use_id}}</p>
4,路由的懒加载 , vue-router嵌套路由

路由懒加载做了什么?
路由懒加载的主要作用就是将路由对应的组件打包成一个个的js代码块.
只有在这个路由被访问到的时候, 才加载对应的组件

懒加载的方式: const Home = () => import('../components/Home.vue')

嵌套路由: 比如在home页面中, 通过/home/news和/home/message访问一些内容.
一个路径映射一个组件, 访问这两个路径也会分别渲染两个组件.

实现嵌套路由有3个步骤:
创建对应的子组件,
在路由映射中配置对应的子路由.
在组件内部使用标签.

5,vue-router参数传递

传递参数主要有两种类型: params和query

params的类型:
配置路由格式: /router/:id
传递的方式: 在path后面跟上对应的值
传递后形成的路径: /router/123, /router/abc
query的类型:
配置路由格式: /router, 也就是普通配置
传递的方式: 对象中使用query的key作为传递方式
传递后形成的路径: /router?id=123, /router?id=abc

传递参数方式一:

<router-link
 :to="{ path: '/Profile/' + Profile_id,
           query : {age: 24, hobby:'炒股'} }"
    tag="button" >档案</router-link>

传递参数方式二: JavaScript代码

<button  @click="ToProfile">档案</button>

export default {
    name: "APP",
    data (){  return {  Profile_id: 'cookie_profile', } },
	methods: {
      ToProfile(){
        this.$router.push(
         { path: '/Profile/' + this.Profile_id,	 // path: '/Profile' + cookie_profile,     
          query : {age: 24, hobby:'炒股'}
        })
      }
    }
}

获取参数: 通过$route对象获取的.

在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 this.$route ,并且当路由切换时,路由对象会被更新。

profile 组件中模板获取参数:
<p>params: {{$route.params.profile_id}}</p>
<p>query: {{$route.query}}</p>

r o u t e 和 route和 routerouter是有区别的
r o u t e r 为 V u e R o u t e r 实 例 , 想 要 导 航 到 不 同 U R L , 则 使 用 router为VueRouter实例,想要导航到不同URL,则使用 routerVueRouterURL使router.push方法
$route为当前router跳转对象里面可以获取name、path、query、params等

6,vue-router导航守卫

导航守卫?
vue-router提供的导航守卫主要用来监听监听路由的进入和离开的.
vue-router提供了beforeEach和afterEach的钩子函数, 它们会在路由即将改变前和改变后触发
在这里插入图片描述

  • 例子

网页标题是通过<title>来显示的, 但是SPA只有一个固定的HTML, 切换不同的页面时, 标题并不会改变.
但是我们可以通过JavaScript来修改<title>的内容.window.document.title = ‘新的标题’.

利用beforeEach来完成标题的修改.
首先, 我们可以在钩子当中定义一些标题, 可以利用meta来定义
其次, 利用导航守卫,修改我们的标题

router.beforeEach((to, from, next) => {
  window.document.title = to.matched[0].meta.title;
  next()
});

导航钩子的三个参数解析:
to: 即将要进入的目标的路由对象.
from: 当前导航即将要离开的路由对象.
next: 调用该方法后, 才能进入下一个钩子

7,keep-alive

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。

  • keep-alive 两个属性:
    • include - 字符串或正则表达,只有匹配的组件会被缓存
    • exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存

router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存:

		// <!--使被包含的组件保留状态,或避免重新渲染 ,使用正则,逗号后面不能有空格   -->
 <keep-alive exclude="Profile,User">
    <router-view>   </router-view>
 </keep-alive>
设置404页面

从我的云笔记中截个图…
在这里插入图片描述

vue-router实例

实现效果

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

路由脚本router/index.js:

在这里插入图片描述

app.vue

在这里插入图片描述

home.vue

在这里插入图片描述

user.vue

在这里插入图片描述

profile.vue

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值