vue全家桶之vue-router

149 阅读4分钟
原文链接: mp.weixin.qq.com

在使用vue-router前要先安装vue-router库,不做详解。

cnpm install vue-router –save

用 Vue.js + vue-router 创建单页应用,是非常简单的。使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们。

vue-router有三个要素:路由map 、路由视图和路由导航。

路由map:指路由与组件的映射关系;

路由视图:指路由映射对应组件的渲染位置;

路由导航:指可以使地址栏发生变化的导航链接。

01

路由map

通过import导入并定义Vue模块、vue-router模块和需要使用的组件;如果使用模块化机制编程导入Vue和VueRouter,要通过全局方法use()来注册安装vue-router;实例化全局router,并传入对应的配置,包括路径path和组件components;在Vue实例中注册组件。

import Vue from 'vue'import App from './App'/*1、引入vue-router模块*/import VRouter from 'vue-router'import Apple from './components/apple'import Banana from './components/banana'Vue.config.productionTip = false//2、用全局方法use()来注册安装vue-routerVue.use(VRouter)//3、实例化一个全局路由router  let router=new VRouter({   //以下是路由map       routes:[        {            path:'/apple',            component:Apple        },        {            path:'/banana',            component:Banana        }    ]});new Vue({  el: '#app',  //通过 router 配置参数注入路由, 从而让整个应用都有路由功能  router,  //4、注册组件    components: {App,VRouter,Apple,Banana},  template: '<App/>'})

有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。可以在创建 router实例的时候,在 routes 配置中给路由设置名称。

let router=new VRouter({   mode: 'history',   //以下是路由map       routes:[        {            path:'/apple',            name: 'applename',            component:Apple        },        {            path:'/banana',            name: 'banananame',            component:Banana        }    ]});

02

路由视图

路由匹配到的组件将渲染在这里。

<router-view> 渲染的组件还可以内嵌自己的 <router-view>,根据嵌套路径,渲染嵌套组件,如果 <router-view>设置了名称,则会渲染对应的路由配置中 components 下的相应组件。

<router-view> </router-view>

03

路由导航

<router-link> 

 通过 to 属性指定目标地址,默认渲染成带有正确链接的 <a> 标签,可以通过配置 tag 属性生成别的标签.。另外,当目标路由成功激活时,链接元素自动设置一个表示激活的 CSS 类名“router-link-active”。

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

router.push({ })

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

router.push({ path: 'apple' }

点击 <router-link :to="..."> 等同于调用 router.push(...)。

<router-link :to="..."> to里的值可以是一个字符串路径,或者一个描述地址的对象,例如:

// 字符串<router-link to="apple"> to apple</router-link>// 对象<router-link :to="{path:'apple'}"> to apple</router-link>// 命名路由<router-link :to="{name: 'applename'}"> to apple</router-link>//直接路由带查询参数query,地址栏变成 /apple?color=red<router-link :to="{path: 'apple', query: {color: 'red' }}"> to apple</router-link>// 命名路由带查询参数query,地址栏变成/apple?color=red<router-link :to="{name: 'applename', query: {color: 'red' }}"> to apple</router-link>//直接路由带路由参数params,params 不生效,如果提供了 path,params 会被忽略<router-link :to="{path: 'apple', params: { color: 'red' }}"> to apple</router-link>// 命名路由带路由参数params,地址栏是/apple/red<router-link :to="{name: 'applename', params: { color: 'red' }}"> to apple</router-link>

同样的规则也适用于router.push(...)方法。

1、关于带参数的路由总结如下:

无论是直接路由“path" 还是命名路由“name”,带查询参数query,地址栏会变成“/url?查询参数名:查询参数值“;

直接路由“path" 带路由参数params params 不生效;

命名路由“name" 带路由参数params 地址栏保持是“/url/路由参数值”;

2、设置路由map里的path值:

带路由参数params时,路由map里的path应该写成:  path:'/apple/:color' ;

带查询参数query时,路由map里的path应该写成: path:'/apple' ;

3、获取参数方法:

在组件中:  {{$route.params.color}}

在js里: this.$route.params.color

dvdf

感谢阅读~