在项目初始中,为hash模式下,hash模式,我们知道,它背后的原理是onhashange,onhaschange的定义如下:
当锚部分发生变化时执行;
这样子,就成了路由的基本操作方式,但是hash模式会使链接产生/#/,hash模式回退不方便,而且无法使用描点定位。如果使用hash方法,为了使页面不会刷新,一般这样干:
如果要是a标签不会刷新,那么需要在a标签的路径前面加#,正常a标签hash模式得href=’#/home’
这样就有了hidtory模式。
history模式使用方法:
new router({
mode:'history',
routes:[]
})
histroy模式用a标签会跳转链接刷新页面,这是因为a标签的默认行为
解决方式用
(不管是hash还是history都支持).
在实际开发过程中,如果我们在前进活着后退的过程中想要记录滚动条的位置,就是在后退之后的前面的一个页面,滚动条还停留在之前的位置,我们可以在vueRouter中添加scrollBhavior对象:
scrollBehavior(to,from,savePosition){//点击浏览器的前进或者后退,或者切换导航的时候触发
console.log(to);//进入的目标路由对象,去向哪里
console.log(from);//离开的路由对象,从哪里来
console.log(savePosition);//记录滚动条的坐标,点击前进或者后退的时候记录的值
//设置坐标的一种方式
// if(savePosition){
// return savePosition;
// }else{
// return {x:0,y:0}
// }
//hash模式,另外一种方式
if(to.hash){
return {
selector: to.hash
}
}
}
hash模式中我们需要在组件的路径中添加”/#xxx”,而且,还需要在文章的描点出添加id=”xxx”即可。
匹配到所有路由,全部映射到一个组件
路径:/user/userId //userId为动态路径参数
获取参数:路由信息对象的parmas
在需要显示的地方可以这么写:
...
- for="app in appList">
"'/User/'+item.id" v-for="(item,index) in userList">{{item.userName}}
...
在引入的路由里面,需要写上
{
path:'/User/:userId?',
component:User
}
执行钩子函数的位置:
router全局
单个路由
组件中
钩子函数:
router实例上:beforeEach, afterEach
单个路由中:beforeEnter
组件内的钩子:beforeRouteEnter, beforeRoteUpdate, beforeRouteLeave
钩子函数的参数:
to: 要进入的目标,路由对象,到哪里去
from:正要离开的路由对象,从哪里来
next:用来决定跳转或取消导航
Vue.js 实例在创建时有一系列的初始化步骤,例如建立数据观察,编译模板,创建数据绑定等。
注:图片出自https://segmentfault.com/a/1190000008570622,侵权删。
beforeCreate
在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。此时数据观测、事件等都尚未初始化。
created
实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
beforeMount
在挂载开始之前被调用:相关的 render 函数首次被调用。
mounted
el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
beforeUpdate
数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
updated
由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
该钩子在服务器端渲染期间不被调用。
beforeDestroy
实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。
原因之一:开启全局代理,所以无法显示localhost:8080