Vue2.0三——Vue-router
我会从两个方面来写路由
自定义路由(以拉勾网为例)
路由指的是在不刷新页面的情况下更新页面通过:#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相关推荐
- vue2.0中的$router 和 $route的区别
vue2.0中的$router 和 $route的区别 最近在学习vue的单页面应用开发,需要vue全家桶,其中用到了VueRouter,在路由的设置和跳转中遇到了两个对象$router 和 $rou ...
- 【Vue2.0】—Vue脚手架配置代理(二十二)
[Vue2.0]-Vue脚手架配置代理(二十二) 方法一 方法二
- 【Vue2.0】—Vue与Component的关系(十二)
[Vue2.0]-Vue与VueComponent的关系(十二) <body><div id="root"><h2>{{name}}</h ...
- 【Vue2.0】—Vue监视数据的原理(五)
[Vue2.0]-Vue监视数据的原理(五) <body><div id="root"><h1>学生的基本信息</h1><bu ...
- 【Vue2.0】—Vue中的key有什么作用?(四)
[Vue2.0]-Vue中的key有什么作用?(四) <div id="root"><!-- 遍历数组 --><ul><button @c ...
- vue2.0搭建vue手脚架(vue-cli)
1.安装node.js 从node官网下载并安装node,安装步骤很简单,只要一路"next"就可以了. 安装完成后,打开命令行工具输入命令node -v,如下图,如果出现对应版本 ...
- vue2.0 创建vue项目步骤
1.提前安装好node 2.可以cmd在自带的命令行中运行,也可以在编辑器中运行 cnpm npm install -g cnpm --registry=https://registry.npm.ta ...
- 【Vue】相关生态——Vue Router路由
Vue Router路由 基本使用 带参数的动态路由匹配 捕获所有路由或404 Not found 路由 嵌套路由 编程式导航 重定向和别名 将props传递给路由组件 不同的历史模式 进阶 导航守卫 ...
- 安装Vue CLI项目(Vue2.0)
一.Vue CLI脚手架(Vue2.0) Vue CLI官方文档:官方文档 1.什么是脚手架 命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及 ...
最新文章
- linux oracle 脚本,Linux的Oracle服务脚本
- 网络推广——网络推广专员从多角度分析网站关键词排名受影响因素
- 35+非常棒的视差滚动(Parallax Scrolling)效果WordPress主题
- iphone11计算机出现问题,苹果11出现死机现象
- VB.NET开发人员必备参考10本书目
- Linux下VTK、ITK的安装及运行 转载
- 更新yum源并重建缓存
- 看完后震惊!清华“姚班”创始人的老师究竟有多牛?他说孩子最应该培养这几个思维……...
- mysql改密码脚本_mysql密码修改脚本
- [Ynoi2012]D1T3
- 自动化运维python学习笔记一
- 【SQLMap工具-1】SQLMap简介及简单应用实例
- smartq ten3 android4,智器TEN3(T15)拆机
- EXSi虚拟机缺少vmdk文件报错问题
- 轻快pdf阅读器如何使用
- 【PhpSpreadsheet】实现excel冻结列和行(即左右滚动时指定列和行固定不动)
- Android 判断是否是刘海屏
- 带音效的计算机软件,音效增强软件哪个好用?好用的音效增强软件推荐
- 独孤思维:赚钱项目的内卷和躺平
- 解决webservice的跨域请求问题
热门文章
- 第 7 章 本地方法栈
- java文件迁移工具,Java的迁移
- 计算机内部信号表现形式,2021山西特岗教师招聘考试:信息技术学科基础考点归纳六...
- 自己构建React项目
- 计算机做表格软件有哪些内容,制作表格软件,详细教您excel怎么制作表格
- Linux引出环境变量的关键字,学习记录008-linux常用命令/设置系统and用户环境变量two(示例代码)...
- qtreeview编辑节点文本_[我花2个月做了叙事短篇游戏]我是怎么做游戏编辑工具的...
- Java selenium 读取网页
- java spring异常处理_Spring项目中优雅的异常处理
- 环境在c盘_程序员,拯救我的C盘