Vue2.0笔记——vue-router路由

简介

使用Vue.js开发SPA(Single Page Application)单页面应用。
vue-router可以通过html5的history API或者hash实现单页应用,即不刷新跳转,切换地址,只是页面上的组件的切换;
vue-router可以实现页面间传参等其他功能;

基本用法

当你要把 vue-router 添加进来,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们。

首先我们需要定义链接url,而vue-router使用<router-link>对a标签进行包装。
HTML:

<div id="app">
    <div>
        <!-- 通过router-link来导航,to属性指定链接, 默认 会渲染成a标签 -->
        <router-link to="/home">Home</router-link>
        <router-link to="/user">User</router-link>
    </div>
    <div>
        <!-- 路由出口,路由匹配到的组件将在这里渲染 -->
        <router-view></router-view>
    </div>
</div>

Javascript:

//1.定义(路由)组件
    var home = {template:‘<p>This is Home Page。。。</p>‘}
    var user = {template:‘<p>This is User Page</p>‘}
    //2.定义路由,这是一组路由,每个路由使用一个大括号
    const routes = [
        {path:‘/home‘,component:home},
        {path:‘/user‘,component:user}
    ];
    //3.创建路由实例,然后传入路由配置
    var router= new VueRouter({
       routes   //缩写,相当于routes:routes
    });
    //4.在Vue实例中注入路由
    var vm = new Vue({
        el:‘#app‘,
        router   //缩写,相当于router:router
    });

运行一下,可以完美的跑起来。

router-link类样式

我们看一下控制台Elements,发现确实变成了<a>标签,并且还为当前选定的<router-link>添加了class “router-link-exact-active”和“router-link-active”,我们可以为其添加类样式。

还可以重新设置它的名称只需要在router路由实例中配置。

linkActiveClass:‘active‘//或其他值

HTML5 History模式

我们看路径,默认会给前面加上#号,可能会看起来很丑,我们可以使用HTML5 History模式。这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面

const router = new VueRouter({
  mode: ‘history‘,
  routes: [...]
});

而如果你这样做的话,后台服务器需要配置,因为我们的应用是个单页客户端应用,如果后台没有正确的配置,可能就会出现404页面。那么就需要一个通配符的方法解决,你可以使用重定向。
3.重定向
1.通过路径方式

const routes=[
    ....
    //若为/,表示默认重定向/home路径,*则表示匹配任何则重定向到
    {path:‘/‘,redirect:‘/home‘}//或者{path:‘*‘,redirect:‘/home‘}
]

当匹配找不到的时候,就会转到这个路由。
2.通过路由名称
当然还可以通过路由名称的方式重定向,前提是你为路由设置了name参数

const routes = [
    {path:‘/user‘,component:user,name:‘user‘},//此时通过name设置路由名称
    {path:‘/‘,redirect:{name:‘user‘}}//此处通过name属性给与路由名称
];

嵌套路由

嵌套路由无非是在路由里再加路由,与组件一样。
假如user中需要login和regist

//重新为user定义模板
<template id="user">
    <div>
        <ul>
            <li><router-link to="/user/login">User Login</router-link></li>
            <li><router-link to="/user/regist">User Regist</router-link></li>
        </ul>
        <router-view></router-view>
    </div>
</template>
//为user路由添加子路由
children:[
    {path:‘login‘,component:login},
    {path:‘regist‘,component:regist}
}
//定义组件
var login = {template:‘<p>用户登录</p>‘}
var regist = {template:‘<p>用户注册</p>‘}

运行一下,可以正常显示。
注意user模板中的router-link和router-view,他俩是一一对应的,跟外面的不一样。

router-link标签渲染

前面说过,router-link的默认渲染为<a>标签,我们可以更改,通过tag属性

<router-link to="/user/login" tag="li">User Login</router-link>
<router-link to="/user/regist" tag="li">User Regist</router-link>

动态路由匹配

如果我们通过路径路径来匹配到某个路由。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用『动态路径参数』。
通俗地讲就是参数嘛,

  • 字符串参数 ?uname=xiao&pwd=123
  • rest风格传参 /yao/456

当然我们这样映射路由的话,肯定是要参数值的,字符串的获得参数和rest获得参数使用了不同的方法

  • 字符串参数 $route.query
  • rest风格参数 $route.params
//字符串参数的方式无需配置映射路径,直接显示
var login = {template:‘<p>用户登录,获取参数,{{$route.query}}</p>‘}

//rest方式
children:[
    {path:‘login‘,component:login},
    {path:‘regist/:uname/:pwd‘,component:regist}
]
var regist = {template:‘<p>用户注册,获取参数,{{$route.params}}</p>‘}

主要说一下第二种动态路径参数,它类似REST ful,匹配的路径都能够映射,一个『路径参数』使用冒号 : 标记 ,当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用

响应路由参数的变化

当使用路由参数时,例如从 /user/login 导航到 /user/regist,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用

复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch(监测变化) $route 对象

watch: {
    ‘$route‘ (to, from) {
      // 对路由变化作出响应...
    }
  }

匹配优先级

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

编程式导航

router.push向当前添加一个路由并使用

除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。

router.push(location, onComplete?, onAbort?)

注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push

这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。

当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)。

声明式 编程式
<router-link :to="..."> router.push(...)
//this.$router.push("home");//字符串,值为路由名称
//this.$router.push({path:‘/user‘});//对象,path指定路径
//this.$router.push({name:‘regist‘,params:{uname:‘chen‘,pwd:123}});//动态参数路由
//this.$router.push({path:‘/user/login‘,query:{uname:‘chen‘,pwd:123}});//带查询参数
以及
router.push({ name: ‘user‘, params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123

注意:如果提供了 path,params 会被忽略
你还需注意,你使用的方式是query还是params,如果你的path使用的是:标注方式的,则使用params,否则使用query

router.replace替换掉当前记录

跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

声明式 编程式
<router-link :to="..." replace> router.replace(...)

其语法结构与router.push方法完全一样,只不过重要的是,不会生成一条历史记录。

router.go(n)前进或后退

这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)。

// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)

// 后退一步记录,等同于 history.back()
router.go(-1)

// 前进 3 步记录
router.go(3)

// 如果 history 记录不够用,那就默默地失败呗
router.go(-100)
router.go(100)

原文地址:http://blog.51cto.com/zouzhelu/2107464

时间: 2024-10-03 18:40:57

Vue2.0笔记——vue-router路由的相关文章

Vue2.0笔记——Vue实例

Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 当创建一个 Vue 实例时,你可以传入一个选项对象,就如前面所提到的如:data,methods,computed,watch等等.一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的.可复用的组件树组成.举个例子,一个 todo 应用的组件树可以是这样的: 根实例Root └─ TodoList ├─ TodoIte

Vue2.0笔记——Vue常用实例属性,实例方法

实例属性 vm.$el vm.$data vm.options vm.$refs vm.$root vm.$el 该实例属性用于获取Vue实例使用的根DOM元素,即el选项所指的元素DOM <body> <div id="app"> <h4>你好,这是四级标题</h4> <p>这是一个段落,我什么都不想说</p> </div> <button onclick="getEl()"

Vue2.0总结———vue使用过程常见的一些问题

Vue目前的的开发模式主要有两种: 1.直接页面级的开发,script直接引入Vue 2.工程性开发,webpack+loader或者直接使用脚手架工具Vue-cli,里面的文件都配置好了 webpack可以进行配置,配置多文件入口,进行多页面开发 第二种Vue开发,结合webpack打包完文件会很大,怎么解决这个问题? 1.webpack代码拆分:code-spliting 2.提取公共(如提取css,js) 3.预渲染:使用prerender-spa-plugin插件 4.后台----开启压

Vue2.0笔记——{{}}模板与自定义过滤器

模板语法 让我们回到最开始 <div id="app"> <h1>{{message}}</h1> </div> <script> var vm = new Vue({ el:'#app', data:{ message:'HelloWorld' } }) </script> 这是一个HelloWorld,简单的通过模板输出.我们称之为数据绑定,而最常见的就是"Mustache"语法 (双大括号

Vue2.0笔记——组件

组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.组件是自定义元素,Vue.js 的编译器为它添加特殊功能. 使用组件 组件的注册与使用 全局注册 我们需要通过一个全局的API来构造.Vue.extend(options)用法:使用基础 Vue 构造器,创建一个"子类".参数是一个包含组件选项的对象.同时还需要一个API通过这个构造器来注册组件,之后才能使用.Vue.component(id, [definition])用

Vue系列:Vue Router 路由梳理

Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参数.查询.通配符 基于 Vue.js 过渡系统的视图过渡效果 细粒度的导航控制 带有自动激活的 CSS class 的链接 HTML5 历史模式或 hash 模式,在 IE9 中自动降级 自定义的滚动条行为 1.动态路由 动态路由,可以将某种模式匹配到的所有路由,并全都映射到同个组件. (通俗点,比如根

Vue Router 路由守卫:完整的导航解析流程

完整的导航解析流程 1 导航被触发. 2 在失活的组件里调用离开守卫. 3 调用全局的 beforeEach 守卫. 4 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+). 5 在路由配置里调用 beforeEnter. 6 解析异步路由组件. 7 在被激活的组件里调用 beforeRouteEnter. 8 调用全局的 beforeResolve 守卫 (2.5+). 9 导航被确认. 10 调用全局的 afterEach 钩子. 11 触发 DOM 更新. 12 用

04 Vue Router路由管理器

路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成,可以非常方便的用于SPA应用程序的开发. Vue Router包含的功能有: 支持HTML5 历史模式或hash模式 支持嵌套路由 支持路由参数 支持编程式路由 支持命名路由 vue-router的基本使用 基本使用步骤 1.引入相关的库文件 导入vue文件为全局window对象挂载Vue构造函数

vue router路由(三)

当环境搭建及Vue语法与指令都有所了解,该说下router. build目录是打包配置文件 (不建议动) config是vue项目基本配置文件 dist是构建后文件 js 手动创建 (根据需要) node_modules 根据package.json 安装依赖模块 src资源文件,基本文件都会放在这里 app.vue  父组件 main.js 入口文件 static构建好的文件会在这个目录 index.html 主页 1.首先安装路由通过npm: npm install vue-router 在