我所知道的 vue-router

简介:

cc206c18a19d8d11ce5df7df90d883fa93552bb2

查看原图

vue-router : 简称路由,简单说就是根据不同的 url 地址,显示不同的效果

<router-link>: 组件用于帮助用户进行 导航 ,也就是我们传统的 a 标签经常做的事;a的标签用 href 属性来指定导航的目标地址,而 <router-link>组件则用 to 属性来定目标地址;

<router-view>: 是路由的出口,路由匹配到的组件将 渲染 在这里,即渲染 <router-link>指向的目标地址。

同一个路径可以匹配多个路由,匹配的优先级就按照路由的定义顺序:谁先定义的,谁的优先级就最高。

创建简单的 vue-router

36ef262635b5882f46e696f03bd692c5893f1436

<router-link> 和 <router-view> 不必成双对的出现,可根据配置的不同路由渲染到一个 <router-view>

<div id='router'>
  <router-link to='/home'>Go to Home</router-link>
  <router-link to='/new'>Go to New</router-link>
  <router-view></router-view>
</div>
//JavaScript 代码
//1.创建组件
 const Home={
    template:`<span>我是主页</span>`
  };
  const News={
    template:`<span>我是新闻</span>`
  };
//2.配置路由
  const routersname=[
    {
    path:'/home',component:Home
  },
    {
        path:'/new',component:News
  },
    //重定向
    {
      path:'*',redirect:'/home'
    }];
//3.生成路由实例
 const router=new VueRouter({
  routes:routersname
  //此时 routers 和 routername 并不相等,所以不能在采用 es6 里面对象的简写方法
  });
  new Vue({
      el:'#router',
      router
  })

注意:在创建路由实例的时候应该知道其中使用了 ES6 对象里面简洁的语法;即在 ES6 中只写属性名不写属性值时,属性值就代表属性名所代表的变量

const router = new VueRouter({
  routes  // (缩写)相当于 routes: routes 是 ES6 对象里面简洁的语法
})

当然我们也可以不采用简写,自己随便配置,还是刚刚那个例子

//2.配置路由
const routersname=[
  { path:'/home',component:Home },
  { path:'/new',component:News },
    //重定向
  { path:'/new',component:News },
];
//3.生成路由实例
const router=new VueRouter({
  routes:routersname
//此时 routers 和 routername 并不相等
//所以不能在采用 es6 里面对象的简写方法
});

所以 router 后面的属性值应该始终和配置路由时候的变量一样,查看源码

嵌套的 vue-router

实际生活中的我们经常会遇到 多层嵌套的组件组合而成,URL 中各段动态路径也按某种结构对应嵌套的各层组件

这时候我们怎么办呐?

其实嵌套路由很简单,只需要加上一个 children 就好,children 里面的写法和外面的一样

3ad40d7002dcb6dc8c41bf2143d07b581e5fe66e

$route.params: 表示当前的参数即冒号后面的东西

/detail/:id/age/:age --->$route.params 表示 id 和 age 组成的对象

查看源码

路由的两种实例方法

  • router.push({path:'/home'}): 直接添加一个路由,表现为切换路由,往历史记录里面添加一个历史记录
  • router.replace({path:'news'}): 替换路由,历史记录里面没有添加记录

77a3b0d2692e0ba1408fd255cdf500cf39619864

引入了过渡动画 ,顺便可以温习一下 transform 组件的知识,页面效果看起来好看多了,哈哈哈哈

查看源码

配置路由的模式

设置路由的跳转方式

mode 表示路由的配置模式:两种

  1. hash 模式(默认):使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。

  2. history 模式: 通过 history 完成 URL 跳转而无须重新加载页面。

//创建路由实例
const router = new VueRouter({
  mode: 'history',//跳转而无须重新加载页面
  routes
})

路由的滚动 scrollBehavior

不知道你们有没有遇到过这样的情况?

当切换到新路由时,我想要想要页面滚到顶部!!!

当切换到新路由时,保持原先的滚动位置!!!!

当切换到新路由时,我想随意定位!!!!

这时候该怎么办???

告诉你 vue-router 能做到,而且很很好,它让你可以自定义路由切换时页面如何滚动。

const router = new VueRouter({
  routes,
  scrollBehavior (to, from, savedPosition) {
    // return 期望滚动到哪个的位置
     return {x:0,y:0} //对于所有路由导航,简单地让页面滚动到顶部
  }
})

路由监听 watch

在 vue 中 watch 用来监听当一个数据属性值发送变化时,就可以调用的函数;属于异步操作;一般情况下,我们建议用 computed 或者 menthods 代替。对于大型的应用我们就建议使用 watch

关于 mothdscomputedwatch 三者的具体区别,推荐看大漠老师写的Vue中何时使用方法、计算属性或观察者

回到 vue-router ,当我们切换路由的时候,希望某些属性也跟着路由变化;例如 这时候我们就可以用 watch 来监听路由,当路由发生变化时,相对于的样式也跟着显示或隐藏;这只是一个很简单的例子

<router-link> 属性

to :相当于 a 的标签用 href 属性,来指定导航的目标地址; 导航的目标地址的几种写法

1.字符串表示

<router-link to='Home'>Home</router-link>

2.v-bind 绑定属性

<router-link :to='Home'>Home</router-link>

3.对象表示

<router-link :to="{path:'Home'}">Home</router-link>

4.命名的路由

<router-link :to="{name:'Home',params:{home:123}}">Home</router-link>

5.带查询参数,下面的结果为 /Home?plan=private

  <router-link :to="{path: 'Home', query: { plan: 'private' }}">Home</router-link>

我们常用前两种方法

replace

<router-link to='Home' replace>Home</router-link> 给它设置了 replace 属性, 会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录。详情请看上面 router.replace 和 router.push() 的区别

设置tag就会把 <router-link> 渲染成某种标签

<router-link to="/foo" tag="li">foo</router-link>
  <!-- 渲染结果 -->
<li class='router-link-exact-active router-link-active'> foo </li>

<router-view> 属性

name 给 <router-view> 设置一个名字,当有过个视图的时候,能够在保证每个视图中精确准确的定位

<router-link to="/">/</router-link>
<router-link to="/other">other</router-link>

<router-view></router-view>
<router-view name="a"></router-view>
<router-view name="b"></router-view>

举个例子

说了这么多,vue 的基本语法已经学的差不多了,我的 vue 语法学习也差不多到此结束了,接下来就是多多练习,在实践中去总结和继续学习。路由是一个难点也是重点,在我接触的 node.js 中,也会遇到路由的跳转。弄明白了这里的路由跳转,那其他地方也没有什么其他太大的问题啦,毕竟语言是相通的。

文末来推荐一些 vue 的学习资料,都是精挑细选的

  1. 官方文档系列 vue vue-router , vuex ,vue-loader
  2. 大漠老师写的vue系列文章,很细很全,有深有浅。看了收获挺多的
  3. 视频学习推荐,从 vue 1.0 开讲,可以大致纵观 vue 的发展,建议看的时候挑着看
  4. vue 2.0 基础系列vue2.0进阶系列
  5. 最后就是我自己总结的 vue 和 GitHub 哈哈哈哈哈

原文发布时间:2018年02月

作者:

本文来源:前端外刊  如需转载请联系原作者

目录
相关文章
|
6月前
|
移动开发 资源调度 JavaScript
Vue Router的介绍与引入
Vue Router的介绍与引入
42 0
|
5天前
|
资源调度 JavaScript 前端开发
路由管理:Vue Router的使用和配置技巧
【10月更文挑战第21天】路由管理:Vue Router的使用和配置技巧
15 3
|
8天前
|
缓存 JavaScript 搜索推荐
Vue Router 导航钩子的使用场景
【10月更文挑战第13天】
8 1
|
8天前
|
JavaScript 搜索推荐 数据处理
Vue Router 导航钩子
【10月更文挑战第17天】需要注意的是,过度使用导航钩子可能会导致代码复杂度增加,因此需要合理规划和使用。此外,不同的钩子在不同的场景下具有不同的作用,需要深入理解其特点和用法,才能更好地发挥它们的价值。可以在实际项目中结合具体需求,充分利用这些导航钩子来打造更加智能、灵活的路由导航机制。
9 1
|
3月前
|
存储 JavaScript 前端开发
Vue学习之--------路由(Router)的基本使用(1)(2022/9/5)
这篇文章是关于Vue-router路由的基本使用教程,涵盖了安装配置、应用插件、编写路由规则、实现页面跳转和高亮显示,以及一些使用中的注意点和项目实际应用案例。
Vue学习之--------路由(Router)的基本使用(1)(2022/9/5)
|
3月前
|
资源调度 JavaScript 前端开发
Vue Router 的使用方式是什么
【8月更文挑战第30天】Vue Router 的使用方式是什么
19 2
|
3月前
|
JavaScript
Vue中router路由的使用、router-link的使用(在项目中的实际运用方式)
这篇文章介绍了Vue中router路由和router-link的使用方式,包括router配置、router-link在模板中的使用,以及实现的导航菜单和页面路由效果。
Vue中router路由的使用、router-link的使用(在项目中的实际运用方式)
|
3月前
|
JavaScript 前端开发 UED
揭秘Vue.js高效开发:Vue Router如何让单页面应用路由管理变得如此简单?
【8月更文挑战第30天】随着Web应用复杂性的增加,单页面应用(SPA)因出色的用户体验和高效的页面加载性能而备受青睐。Vue.js凭借简洁的语法和灵活的组件系统成为构建SPA的热门选择,其官方路由管理器Vue Router则简化了路由管理。本文通过实战示例介绍如何利用Vue Router实现高效的SPA路由管理,包括命名路由、动态路由及其核心优势。
29 0
|
4月前
|
JavaScript
This dependency was not found:* vue/types/umd in ./src/router/index.jsTo install it, you can run
This dependency was not found:* vue/types/umd in ./src/router/index.jsTo install it, you can run
This dependency was not found:* vue/types/umd in ./src/router/index.jsTo install it, you can run
|
4月前
|
JavaScript 前端开发 API
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
770 0