我会从两个方面来写路由

自定义路由(以拉勾网为例)

路由指的是在不刷新页面的情况下更新页面通过:#hash,例如:10.0.164.8:8080/index.html/#main
然后通过H5的history对象的history.pushState()+popState事件实现路由切换

实现步骤:
(1)在script文件下创建路由表 routes.js

export default {'/' : 'Position' 首页'/search': 'Search','/mine' : 'Mine'
}

(2)在app.js中匹配路径

import routes form  './routes'
//动态获取组件
new Vue({el : '#root',data:{//定义当前路径信息currentRoute: window.location.pathname   },computed : {    //生成子路由组件ViewComponent() {//根据路由找到匹配的组件名const MatchingView = routes[this.currentRoute];返回组件对象return MatchingView ? require(`./page/${MatchingView}.vue`) :require('./page/404.vue')}},//渲染组件render(h) {return h(this.ViewComponent)}
})

(3)在index.vue中的section放通过插槽存放porixtion mine search 组件

<section><slot></slot> //插槽用来存放各个组件
</section>

(4)position.vue

import Index from './Index.vue'
export default {//导入Index组件data() {return{}},componets : {Index //定义Index组件}
}将template的内容外层用 <Index></Index>包(Index建个插槽)

(5)同理search也一样

search.vue
import Index from './Index.vue'
export default {//导入Index组件data() {return{}},componets : {Index //定义Index组件}
}将template的内容外层用 <Index></Index>包

(6)点击链接切换组件

通过history提供的事件
window.addEventListener('popstate',function(){vm.currentRoute = window.location.pathname
},false)

(7)定义点击切换组件时的a标签组件

VLink.vue 写逻辑<template><a :href='href' class="{active:isActive}"><slot></slot>@click.prevent='go'</a></template>import routes from '../routes'export default {props : {               //对象类型href: {type : String,required : true}},computed: {isActive () {<!--判断调用组件传递进来的href是否是当前路径的href-->return this.href == this.$root.currentRoute}},methods:{go(){this.$rout.currentRoute = this.hrefwindow.history.pushState(null,routes[this.href],this.href)}}}

(8)通用组件,Vlink.vue 在index.vue中引入

import VLink form '../../vlink.vue'
在index.vue里找到底部 ul li 用 v-link 标签包住
<ul><v-link href='/'><li></li></v-link><v-link href='/search'><li></li></v-link><v-link href='/mine'><li></li></v-link>
</ul>
通过a链接<template><a><slot></slot></a></template>Vue.component('VLink',{template})

vue-router

还是框架简单 来来来

路由有三种导航钩子:

  • 1 、全局导航钩子

    beforeEach
    beforeResolve
    afterEach

       每个钩子方法接收三个参数:to: Route : 即将要进入的目标 [路由对象]from: Route : 当前导航正要离开的路由next: Function : 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next方法的调用参数。next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed (确认的)。next(false): 中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from路由对应的地址。next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。确保要调用 next方法,否则钩子就不会被 resolved。

    例子:

       const router = new VueRouter({ ... })router.beforeEach((to, from, next) => {// do something next();});router.afterEach((to, from, next) => {console.log(to.path);});原文链接:http://blog.csdn.net/sinat_17775997/article/details/68941078
  • 2 、某个路由独享的导航钩子

    beforeEnter

  • 3 、路由组件里的导航钩子

    beforeRouteEnter
    beforeRouteUpdate (2.2 新增)
    beforeRouteLeave
    例子:

    let fromPath = '';
    export default{beforeRouteEnter (to, from, next) {// 在渲染该组件的对应路由被 confirm 前调用// 不!能!获取组件实例 `this`// 因为当钩子执行前,组件实例还没被创建fromPath = from.path;next();},
    }
    

(1)安装插件 npm i vue-router -D

app.js引入:
import Vue from 'vue'
import VueRouter from 'vue-router'
import '../../app.scss'
import routes from './routes'Vue.use(VueRouter)const routes = new VueRouter({routes
})
new Vue({el:'#root',router
})配置:
webpack.config.js,跟plugins同级
externals : {'vue' : 'window.Vue''vue-router':'window.VueRouter'
}
会将第三方组件抽离出去
把node_modules/vue/dist/vue.min.js
/vue/dist/vue-router/vue-router.min.js
放到根目录并在index.html中引入这样减小了app.js的大小

(2)定义

1、 scripts下创建routes.jsimport Index frmm './pages/Index.vue'
import Position from './pages/Position.vue'
import Search from './pages/Search.vue'
import Mine from './pages/Mine.vue'路由表:
export default [{path: '/',componebt: 'Index',childern: [{path:'/position',component : Position,},{path:'/search',component : Search},{path:'/mine',component : Mine},]}
]2.首页 更改入口index.html<router-view></route-view>index.vue<router-view></route-view>index.vue
import {routerLink} from 'vue-router'
//声明式跳转
<router-link :to='{name:'Detail',params:{xid:123}}'>去详情页
</router-link>
获取:this.$route.params.xid
编程时跳转
this.$router.history.push({name:'Detail',params:{xid:123}})

Vue2.0三——Vue-router相关推荐

  1. vue2.0中的$router 和 $route的区别

    vue2.0中的$router 和 $route的区别 最近在学习vue的单页面应用开发,需要vue全家桶,其中用到了VueRouter,在路由的设置和跳转中遇到了两个对象$router 和 $rou ...

  2. 【Vue2.0】—Vue脚手架配置代理(二十二)

    [Vue2.0]-Vue脚手架配置代理(二十二) 方法一 方法二

  3. 【Vue2.0】—Vue与Component的关系(十二)

    [Vue2.0]-Vue与VueComponent的关系(十二) <body><div id="root"><h2>{{name}}</h ...

  4. 【Vue2.0】—Vue监视数据的原理(五)

    [Vue2.0]-Vue监视数据的原理(五) <body><div id="root"><h1>学生的基本信息</h1><bu ...

  5. 【Vue2.0】—Vue中的key有什么作用?(四)

    [Vue2.0]-Vue中的key有什么作用?(四) <div id="root"><!-- 遍历数组 --><ul><button @c ...

  6. vue2.0搭建vue手脚架(vue-cli)

    1.安装node.js 从node官网下载并安装node,安装步骤很简单,只要一路"next"就可以了. 安装完成后,打开命令行工具输入命令node -v,如下图,如果出现对应版本 ...

  7. vue2.0 创建vue项目步骤

    1.提前安装好node 2.可以cmd在自带的命令行中运行,也可以在编辑器中运行 cnpm npm install -g cnpm --registry=https://registry.npm.ta ...

  8. 【Vue】相关生态——Vue Router路由

    Vue Router路由 基本使用 带参数的动态路由匹配 捕获所有路由或404 Not found 路由 嵌套路由 编程式导航 重定向和别名 将props传递给路由组件 不同的历史模式 进阶 导航守卫 ...

  9. 安装Vue CLI项目(Vue2.0)

    一.Vue CLI脚手架(Vue2.0) Vue CLI官方文档:官方文档 1.什么是脚手架 ​ 命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及 ...

最新文章

  1. linux oracle 脚本,Linux的Oracle服务脚本
  2. 网络推广——网络推广专员从多角度分析网站关键词排名受影响因素
  3. 35+非常棒的视差滚动(Parallax Scrolling)效果WordPress主题
  4. iphone11计算机出现问题,苹果11出现死机现象
  5. VB.NET开发人员必备参考10本书目
  6. Linux下VTK、ITK的安装及运行 转载
  7. 更新yum源并重建缓存
  8. 看完后震惊!清华“姚班”创始人的老师究竟有多牛?他说孩子最应该培养这几个思维……...
  9. mysql改密码脚本_mysql密码修改脚本
  10. [Ynoi2012]D1T3
  11. 自动化运维python学习笔记一
  12. 【SQLMap工具-1】SQLMap简介及简单应用实例
  13. smartq ten3 android4,智器TEN3(T15)拆机
  14. EXSi虚拟机缺少vmdk文件报错问题
  15. 轻快pdf阅读器如何使用
  16. 【PhpSpreadsheet】实现excel冻结列和行(即左右滚动时指定列和行固定不动)
  17. Android 判断是否是刘海屏
  18. 带音效的计算机软件,音效增强软件哪个好用?好用的音效增强软件推荐
  19. 独孤思维:赚钱项目的内卷和躺平
  20. 解决webservice的跨域请求问题

热门文章

  1. 第 7 章 本地方法栈
  2. java文件迁移工具,Java的迁移
  3. 计算机内部信号表现形式,2021山西特岗教师招聘考试:信息技术学科基础考点归纳六...
  4. 自己构建React项目
  5. 计算机做表格软件有哪些内容,制作表格软件,详细教您excel怎么制作表格
  6. Linux引出环境变量的关键字,学习记录008-linux常用命令/设置系统and用户环境变量two(示例代码)...
  7. qtreeview编辑节点文本_[我花2个月做了叙事短篇游戏]我是怎么做游戏编辑工具的...
  8. Java selenium 读取网页
  9. java spring异常处理_Spring项目中优雅的异常处理
  10. 环境在c盘_程序员,拯救我的C盘