美文网首页
27.keep-alive保持路由状态

27.keep-alive保持路由状态

作者: 最爱喝龙井 | 来源:发表于2019-11-22 11:58 被阅读0次

我们在浏览网页的时候,有时候跳到别的页面的时候,在跳回去还是希望保持我们离开页面时候的状态,这个时候就可以用keep-alive来解决这个问题了,keep-alive字面意思就是保持活着的意思,它的使用也很简单,直接用keep-alive包裹住router-view就可以了,是不是很简单😎

<keep-alive>
    <router-view></router-view>
</keep-alive>

但是,我遇到了问题,问题就是出在嵌套路径,首先,有三种解决方案:

第一种方案:通过生命周期钩子函数,想法就是,created每次只会创建一次,我们在created钩子函数中可以控制它的路由

created() {
        console.log('home created')
        this.$router.push('/home/news')
    }
image.png
这种方式的结果就是我们在跳回来的时候,由于使用了keep-alive,只会在第一次打开页面的时候触发一次created回调函数,在往回跳转的时候路由就变成了/home,😱,so,pass

第二种解决方案:通过activateddeactivated函数来解决,activated函数就是每次页面活跃的时候就会触发,deactivated函数就是每次离开页面的时候就会触发,我们可以预先定义一个变量保存住一个路径,然后当我们离开的时候,拿到离开时的路由,然后赋值给这个变量,在activated函数中控制路由

export default {
    name: 'Home',
    data() {
        return {
            path: '/home/news'
        }
    },
    activated() {
        this.$router.push(this.path)
    },
    deactivated() {
        console.log(this.$route.path) // 新页面的路由
        this.path = this.$route.path
    },
}
image.png image.png

这种方案的结果就是跳转不回去了,deactivated函数获取到的路由是我们跳转到的页面的路由,也就是说我们获取的时机有点不大对,😱,好shit

第三种方案:我们可以通过activated函数beforeRouteLeave函数来解决这个问题,思路和第二种方案一样,看看beforeRouteLeave函数能不能拿到我们离开时页面的路由

export default {
    name: 'Home',
    data() {
        return {
            path: '/home/news'
        }
    },
    activated() {
        this.$router.push(this.path)
    },
    beforeRouteLeave (to, from, next) {
        console.log(from.path)
        this.path = from.path
        next()
    }
}

这种方案终于成功的实现了,我们的需求,😍,perfect

到此,我们的需求解决了,但是我又有了新的需求,如果我想让一个组件频繁的被创建销毁,怎么办呢,由于我们是在app.vue中写的keep-alive,所以所有的组件现在都不会频繁的创建销毁,这时我们就需要用到keep-alive的两个属性,includeexclude,这两个属性可以接受字符串和正则表达式作为属性值。

<keep-alive exclude="Profile">
    <router-view></router-view>
</keep-alive>

注意:这里的Profile就是组件当中的name属性值。

相关文章

  • 27.keep-alive保持路由状态

    我们在浏览网页的时候,有时候跳到别的页面的时候,在跳回去还是希望保持我们离开页面时候的状态,这个时候就可以用kee...

  • angular2--路由状态保持

    1. ui-router-ng2 2.RouteReuseStrategy 附: angular2 中文版文档

  • react-router-redux

    react-router-redux 保持路由与应用状态(state)同步 早前库的名字为redux-simple...

  • 解决angular路由复用懒加载不起作用的问题

    路由复用 路由复用主要是为了缓存一些页面的状态,例如:搜索结果,查看某一条后再回到页面依然保持原有的搜索列表结果。...

  • React开发记录点

    Layout、Sider、Menu 通过设置 ,来保持侧边栏的选中状态和路由一致,即使手动修改浏览器路径。 rea...

  • react-router 究竟怎么玩儿?

    啥是 router ? router 是路由啊! 路由又是啥? 路由器? 在前端领域, 路由是用来保持UI界面与U...

  • CCNA-15、RIP协议

    路由信息协议-RIP 距离矢量路由协议会产生环路,链路状态协议不会产生环路。 距离矢量路由协议会产生环路,链路状态...

  • 保持状态

    所有的问题,都有解决的办法,要相信方法比困难多,提高分析能力,处理能力,表达能力,善于学习和培养,举一反三...

  • 保持状态

    终于降温了,夏季终于要结束了。 状态不错,继续保持。 永不低头的人,免不了喜欢挑战。

  • 保持状态

    2016年11月2号 16.44(记实) 除了胃口没有恢复以前超能吃之外,win的状态基本不错,眼药水继续...

网友评论

      本文标题:27.keep-alive保持路由状态

      本文链接:https://www.haomeiwen.com/subject/plbfwctx.html