1.作用:控制路由跳转时操作浏览器历史记录的模式
浏览器的历史记录有两种写入方式:push和replace,其中push是追加历史记录,replace是替换当前记录。路由跳转时候默认为push方式
2.开启replace模式:
<router-link replace ...>News</router-link>
作用:不借助<router-link>
实现路由跳转,让路由跳转更加灵活
具体编码
- this.$router.push({
- name:'xiangqing',
- params:{
- id:xxx,
- title:xxx
- }
- })
-
- this.$router.replace({
- name:'xiangqing',
- params:{
- id:xxx,
- title:xxx
- }
- })
- this.$router.forward() //前进
- this.$router.back() //后退
- this.$router.go() //可前进也可后退
作用:让不展示的路由组件保持挂载,不被销毁
- //缓存一个路由组件
- <keep-alive include="News"> //include中写想要缓存的组件名,不写表示全部缓存
- <router-view></router-view>
- </keep-alive>
-
- //缓存多个路由组件
- <keep-alive :include="['News','Message']">
- <router-view></router-view>
- </keep-alive>
activated
和deactivated
是路由组件所独有的两个钩子,用于捕获路由组件的激活状态activated
路由组件被激活时触发deactivated
路由组件失活时触发- activated(){
- console.log('News组件被激活了')
- this.timer = setInterval(() => {
- this.opacity -= 0.01
- if(this.opacity <= 0) this.opacity = 1
- },16)
- },
- deactivated(){
- console.log('News组件失活了')
- clearInterval(this.timer)
- }
-
- //全局前置路由守卫————初始化的时候、每次路由切换之前被调用
- router.beforeEach((to,from,next) => {
- console.log('前置路由守卫',to,from)
- if(to.meta.isAuth){
- if(localStorage.getItem('school')==='atguigu'){
- next()
- }else{
- alert('学校名不对,无权限查看!')
- }
- }else{
- next()
- }
- })
-
- //全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用
- router.afterEach((to,from)=>{
- console.log('后置路由守卫',to,from)
- document.title = to.meta.title || '硅谷系统'
- })
- {
- name:'zhuye',
- path:'/home',
- component:Home,
- meta:{title:'主页'},
- children:[
- {
- name:'xinwen',
- path:'news',
- component:News,
- meta:{title:'新闻'},
- //独享守卫,特定路由切换之后被调用
- beforeEnter(to,from,next){
- console.log('独享路由守卫',to,from)
- if(localStorage.getItem('school') === 'atguigu'){
- next()
- }else{
- alert('暂无权限查看')
- }
- }
- }
src/pages/About.vue
:
- <template>
- <h2>我是About组件的内容</h2>
- </template>
-
- <script>
- export default {
- name:'About',
- //通过路由规则,离开该组件时被调用
- beforeRouteEnter (to, from, next) {
- console.log('About--beforeRouteEnter',to,from)
- if(localStorage.getItem('school')==='atguigu'){
- next()
- }else{
- alert('学校名不对,无权限查看!')
- }
- },
- //通过路由规则,离开该组件时被调用
- beforeRouteLeave (to, from, next) {
- console.log('About--beforeRouteLeave',to,from)
- next()
- }
- }
- </script>
对于一个url来说,什么是hash值?—— #及其后面的内容就是hash值
hash值不会包含在 HTTP 请求中,即:hash值不会带给服务器
hash模式:
地址中永远带着#号,不美观
若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合法
兼容性较好
history模式:
地址干净,美观
兼容性和hash模式相比略差
应用部署上线时需要后端人员支持,解决刷新页面服务端404的问题
connect-history-api-fallback
nginx