• vue router.push(),router.replace(),router.go()和router.replace后需要返回两次的问题


    转载: https://www.cnblogs.com/lwwen/p/7245083.html

       https://blog.csdn.net/qq_15385627/article/details/83146766

    1.router.push(location)=====window.history.pushState

    想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。

    // 字符串
    router.push('home')
     
    // 对象
    router.push({ path: 'home' })
     
    // 命名的路由
    router.push({ name: 'user', params: { userId: 123 }})
     
    // 带查询参数,变成 /register?plan=private
    router.push({ path: 'register', query: { plan: 'private' }})

    2.router.replace(location)=====window.history.replaceState

    跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录

    3.router.go(n)====window.history.go

    // 在浏览器记录中前进一步,等同于 history.forward()
    router.go(1)
     
    // 后退一步记录,等同于 history.back()
    router.go(-1)
     
    // 前进 3 步记录
    router.go(3)
     
    // 如果 history 记录不够用,那就默默地失败呗
    router.go(-100)
    router.go(100)

    附:----------------------------

    vue.router中replace需要返回两次问题及解决方案

    • 问题:现有三个页面a , b , c , 递进关系,a页面router.push跳转至b,b再router.push跳转至c,c使用$router.replace()回到b,然后点击b页面的返回键,需要点击两次才能回到a页面
    • 需求:c保持router.replace至b方式不变,b页面返回键点击一次正常返回a页面
    • 解决方法:使用replace方法之后,再使用router.go(-1)方法返回一次就可以。
      例:
      this.router.replacePage({name:'b'})
      this.router.go(-1)
    • 原理:先解析一下几种页面跳转方式的不同,
    1. router.push : 跳转到新的页面,向history栈添加新一个新纪录,点击返回,返回到上一级页面。
    2. router.replace: 打开新的页面,不会像history添加新纪录,而是直接替换掉当前记录。
    3. router.go: 在history有记录的情况下,前进后退相应的页面。
      页面的跳转记录就是:a->b->c->b
      页面的堆栈记录则是:a->b->b
      那么返回的时候路线就是b->b->a,相当于b页面有两个,但由于b页面是一模一样的,所以视觉上是觉得点了两次返回键。
      那么解决的思路就很清晰了,减少history中的b的记录,就是在用b替换c页面记录同时,回退一页,记录就变成a->b,返回的时候自然是直接回到a。
     
  • 相关阅读:
    springboot与mybatisplus集成原理
    《金字塔原理》读书笔记
    域内LDAP学习
    域内委派攻击
    域内ACL攻防
    域内用户与机器用户
    BloodHound分析域结构
    Net MVC内存马
    计算机网络再次整理————socket[一]
    计算机网络再次整理————tcp例子[五]
  • 原文地址:https://www.cnblogs.com/taohuaya/p/10276438.html
Copyright © 2020-2023  润新知